intercom-app 0.2.1 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/CHANGELOG.md +7 -0
- data/README.md +83 -14
- data/RELEASING +2 -2
- data/app/views/intercom_app/sessions/login.html.erb +3 -1
- data/lib/generators/intercom_app/home_controller/templates/home_controller.rb +3 -1
- data/lib/generators/intercom_app/home_controller/templates/index.html.erb +5 -3
- data/lib/intercom-app/configuration.rb +2 -0
- data/lib/intercom-app/login_protection.rb +1 -1
- data/lib/intercom-app/session_storage.rb +4 -6
- data/lib/intercom-app/sessions_concern.rb +18 -3
- data/lib/intercom-app/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b7f46437a2cf130cdd55c76cc0cd98308793834b
|
4
|
+
data.tar.gz: b3de97e1517c26d4e3b3283e3efce18d4ad56386
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4a49259db239d5a5c087a11c2f6144436deef5b9a61c117531c4fef9f7c416f2f6a3d3c847319e5de1f618cde01b0552116292ccad193464a9df1fcce5d384ad
|
7
|
+
data.tar.gz: a099e74a36e04a9eb83dc6860b11f187608b13169e5b6b47c6a46356cdb5f9313082e38c8389fe9271edca7938d5a2a06e0f4b38cf2b64e9a651be4f567a9a38
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
@@ -23,3 +23,10 @@ Features:
|
|
23
23
|
## 0.2.1 (2016-08-17)
|
24
24
|
|
25
25
|
* Fix webhook subscription fail (@Skaelv)
|
26
|
+
|
27
|
+
## 0.2.2 (2016-10-11)
|
28
|
+
|
29
|
+
* Add callback_hash Proc for custom storage
|
30
|
+
* Add session_storage_on_login Proc for custom storage
|
31
|
+
* Rename token to intercom_token
|
32
|
+
* Allow custom storage to intercom App model (@Skaelv)
|
data/README.md
CHANGED
@@ -1,19 +1,19 @@
|
|
1
|
-
Intercom
|
1
|
+
Intercom Integration
|
2
2
|
===========
|
3
3
|
|
4
4
|
Intercom Application Rails engine and generator
|
5
5
|
|
6
|
-
*Note this SDK is in beta version and still needs a lot of improvements. We advise you to use it only if you feel you can help contributing and fix issues when you find them*
|
7
|
-
|
8
6
|
Description
|
9
7
|
-----------
|
10
|
-
This gem includes a Rails Engine and generators for writing Rails applications using the Intercom API. The Engine provides a SessionsController and all the required code for authenticating with an app via
|
8
|
+
This gem includes a Rails Engine and generators for writing Rails applications using the Intercom API. The Engine provides a SessionsController and all the required code for authenticating with an app via OAuth.
|
9
|
+
|
10
|
+
[Getting started with Intercom Integrations](https://developers.intercom.io/docs/integration-setup-guide)
|
11
11
|
|
12
12
|
Apply to become an Intercom Developer
|
13
13
|
--------------------------------
|
14
|
-
To create an Intercom application and get your `
|
15
|
-
Once your application is created you can apply for an
|
16
|
-
|
14
|
+
To create an Intercom application and get your `client_id` and `client_secret` you will need to create an [Intercom account](https://app.intercom.io) first.
|
15
|
+
Once your application is created you can apply for an OAuth application in the "App Settings >> OAuth" section.
|
16
|
+
Make sure you request read admin permission to use [omniauth-intercom](http://github.com/intercom/omniauth-intercom).
|
17
17
|
Installation
|
18
18
|
------------
|
19
19
|
To get started create a new rails app :
|
@@ -24,7 +24,7 @@ $ rails new my_intercom_app
|
|
24
24
|
$ cd my_intercom_app
|
25
25
|
```
|
26
26
|
Then add `intercom-app` to your Gemfile and bundle install :
|
27
|
-
`gem 'intercom-app'`
|
27
|
+
`gem 'intercom-app', '>= 0.2.1'`
|
28
28
|
and run :
|
29
29
|
``` sh
|
30
30
|
$ bundle install
|
@@ -41,7 +41,7 @@ Generators
|
|
41
41
|
The default generator will run the `install`, `app_model`, and `home_controller` generators. This is the recommended way to start your app.
|
42
42
|
|
43
43
|
```sh
|
44
|
-
$ rails generate intercom_app --app_key <
|
44
|
+
$ rails generate intercom_app --app_key <intercom_client_id> --app_secret <intercom_client_secret> --oauth_modal true
|
45
45
|
```
|
46
46
|
**oauth_modal**:
|
47
47
|
- If true you can authenticate with Intercom using a modal
|
@@ -50,6 +50,12 @@ $ rails generate intercom_app --app_key <your_app_key> --app_secret <your_app_se
|
|
50
50
|
|
51
51
|
*Note that you will need to run rake db:migrate after this generator*
|
52
52
|
|
53
|
+
At this point you've finished the setup. You can run `rails s` and complete Intercom Authentication to generate a new intercom_token.
|
54
|
+
You can make calls to Intercom APIs using `@intercom_client` in all controllers that inherits from `IntercomApp::AuthenticatedController`. This `@intercom_client` variable is instantiated with the token associated to the current session.
|
55
|
+
|
56
|
+
### Adding your own Intercom app to your Integration
|
57
|
+
|
58
|
+
If you want to add Intercom's widget for your integration (which you definitely should!), we recommend that you configure [intercom-rails]("https://github.com/intercom/intercom-rails") independently.
|
53
59
|
### Install Generator
|
54
60
|
|
55
61
|
```sh
|
@@ -57,15 +63,15 @@ $ rails generate intercom_app:install
|
|
57
63
|
|
58
64
|
# or optionally with arguments:
|
59
65
|
|
60
|
-
$ rails generate intercom_app:install --app_key <
|
66
|
+
$ rails generate intercom_app:install --app_key <intercom_client_id> --app_secret <intercom_client_secret> --oauth_modal true
|
61
67
|
```
|
62
68
|
|
69
|
+
*Note that you will need to run rake db:migrate after this generator*
|
70
|
+
|
63
71
|
You can update any of these settings later on easily, the arguments are simply for convenience.
|
64
72
|
|
65
73
|
The generator adds IntercomApp and the required initializers to the host Rails application.
|
66
74
|
|
67
|
-
After running the `install` generator, you can start your app with `bundle exec rails server` and install your app by visiting localhost.
|
68
|
-
|
69
75
|
|
70
76
|
### App Model Generator
|
71
77
|
|
@@ -73,9 +79,9 @@ After running the `install` generator, you can start your app with `bundle exec
|
|
73
79
|
$ rails generate intercom_app:app_model
|
74
80
|
```
|
75
81
|
|
76
|
-
The install generator doesn't create any database models for you and if you are starting a new app its quite likely that you will want one (most of our internally developed apps do!). This generator creates a simple
|
82
|
+
The install generator doesn't create any database models for you and if you are starting a new app its quite likely that you will want one (most of our internally developed apps do!). This generator creates a simple `App` model and a migration. It also creates a model called `SessionStorage` which interacts with `IntercomApp::SessionRepository`. Check out the later section to learn more about `IntercomApp::SessionRepository`
|
83
|
+
|
77
84
|
|
78
|
-
*Note that you will need to run rake db:migrate after this generator*
|
79
85
|
|
80
86
|
|
81
87
|
### Home Controller Generator
|
@@ -101,10 +107,51 @@ The `install` generator places your App credentials directly into the intercom_a
|
|
101
107
|
IntercomApp.configure do |config|
|
102
108
|
config.api_key = ENV['INTERCOM_CLIENT_APP_KEY']
|
103
109
|
config.app_secret = ENV['INTERCOM_CLIENT_APP_SECRET']
|
110
|
+
config.hub_secret = ENV['INTERCOM_WEBHOOK_HUB_SECRET']
|
104
111
|
config.oauth_modal = false
|
105
112
|
end
|
106
113
|
```
|
107
114
|
|
115
|
+
Session storage
|
116
|
+
----------------------
|
117
|
+
|
118
|
+
Configure the `store_in_session_before_login` Proc to store parameters in session before OAuth.
|
119
|
+
```ruby
|
120
|
+
IntercomApp.configure do |config|
|
121
|
+
# storing data in the session before the authentication helps you access them on the callback
|
122
|
+
# params contains omniauth hash (https://github.com/intercom/omniauth-intercom)
|
123
|
+
config.store_in_session_before_login = Proc.new do |session, params|
|
124
|
+
session[:name] = params[:name]
|
125
|
+
session[:third_party_admin_id] = params[:third_party_admin_id]
|
126
|
+
end
|
127
|
+
}
|
128
|
+
end
|
129
|
+
```
|
130
|
+
|
131
|
+
|
132
|
+
Callback Storage
|
133
|
+
----------------------
|
134
|
+
|
135
|
+
When customers authenticate your app against Intercom, the OAuth `token` and the `intercom_app_id` are stored in the `App` model.
|
136
|
+
To store custom data you simply need to add new attributes to `App` model by running a migration and configure the `callback_hash` Proc to return this custom data :
|
137
|
+
|
138
|
+
```shell
|
139
|
+
rails generate migration addNameAndThirdPartyAdminIdToApp
|
140
|
+
```
|
141
|
+
|
142
|
+
```ruby
|
143
|
+
IntercomApp.configure do |config|
|
144
|
+
# retrieve previously stored in session params
|
145
|
+
# response contains omniauth hash (https://github.com/intercom/omniauth-intercom)
|
146
|
+
config.callback_hash = Proc.new { |session, response|
|
147
|
+
{
|
148
|
+
name: response[:name],
|
149
|
+
third_party_admin_id: session[:admin_id]
|
150
|
+
}
|
151
|
+
}
|
152
|
+
end
|
153
|
+
```
|
154
|
+
|
108
155
|
Webhooks Subscriptions
|
109
156
|
----------------------
|
110
157
|
|
@@ -123,9 +170,31 @@ end
|
|
123
170
|
**Important** You will need to request the `manage_webhooks` permissions from Intercom to receive webhooks from Intercom.
|
124
171
|
|
125
172
|
|
173
|
+
Intercom-Wix
|
174
|
+
----------------------
|
175
|
+
|
176
|
+
The [intercom-wix](https://github.com/Skaelv/intercom-wix) app is an example of an integration generated with the `intercom-ruby-app`.
|
177
|
+
|
126
178
|
Connect to the Intercom API
|
127
179
|
----------------------
|
128
180
|
This gem includes the following libraries :
|
129
181
|
|
130
182
|
http://github.com/intercom/omniauth-intercom <= Simple rake middleware to authenticate your customers with Intercom
|
131
183
|
http://github.com/intercom/intercom-ruby <= Intercom Ruby API wrapper
|
184
|
+
|
185
|
+
|
186
|
+
## Pull Requests
|
187
|
+
|
188
|
+
- **Add tests!** Your patch won't be accepted if it doesn't have tests.
|
189
|
+
|
190
|
+
- **Document any change in behaviour**. Make sure the README and any other
|
191
|
+
relevant documentation are kept up-to-date.
|
192
|
+
|
193
|
+
- **Create topic branches**. Don't ask us to pull from your master branch.
|
194
|
+
|
195
|
+
- **One pull request per feature**. If you want to do more than one thing, send
|
196
|
+
multiple pull requests.
|
197
|
+
|
198
|
+
- **Send coherent history**. Make sure each individual commit in your pull
|
199
|
+
request is meaningful. If you had to make multiple intermediate commits while
|
200
|
+
developing, please squash them before sending them to us.
|
data/RELEASING
CHANGED
@@ -3,9 +3,9 @@ To release a new version of the intercom-ruby-app gem :
|
|
3
3
|
2. Add a CHANGELOG entry
|
4
4
|
3. Commit to master with an explicit message : "Bump to vX.Y.Z"
|
5
5
|
4. Tag the new release :
|
6
|
-
$ git tag
|
6
|
+
$ git tag -a vx.y.z -m 'Tag message'
|
7
7
|
5. Push the new release :
|
8
|
-
$ git push
|
8
|
+
$ git push origin master
|
9
9
|
6. Push the new tag :
|
10
10
|
$ git push --tags
|
11
11
|
7. Build the new gem :
|
@@ -19,5 +19,7 @@
|
|
19
19
|
});
|
20
20
|
</script>
|
21
21
|
<% else %>
|
22
|
-
<a href="/auth/intercom">
|
22
|
+
<a href="/auth/intercom">
|
23
|
+
<img src="https://static.intercomassets.com/assets/oauth/primary-7edb2ebce84c088063f4b86049747c3a.png" srcset="https://static.intercomassets.com/assets/oauth/primary-7edb2ebce84c088063f4b86049747c3a.png 1x, https://static.intercomassets.com/assets/oauth/primary@2x-0d69ca2141dfdfa0535634610be80994.png 2x, https://static.intercomassets.com/assets/oauth/primary@3x-788ed3c44d63a6aec3927285e920f542.png 3x"/>
|
24
|
+
</a>
|
23
25
|
<% end %>
|
@@ -1,6 +1,8 @@
|
|
1
1
|
class HomeController < IntercomApp::AuthenticatedController
|
2
2
|
|
3
3
|
def index
|
4
|
-
|
4
|
+
# Example of an API request using intercom-ruby gem
|
5
|
+
# Request 'read users' permission for the following request
|
6
|
+
# @users_names = @intercom_client.users.find_all(:type=>'users', :per_page => 10, :page => 1, :order => "desc", :sort => "created_at").map(&:name)
|
5
7
|
end
|
6
8
|
end
|
@@ -1,8 +1,10 @@
|
|
1
|
-
<a href="/
|
1
|
+
<a href="/auth/intercom">
|
2
|
+
<img src="https://static.intercomassets.com/assets/oauth/primary-7edb2ebce84c088063f4b86049747c3a.png" srcset="https://static.intercomassets.com/assets/oauth/primary-7edb2ebce84c088063f4b86049747c3a.png 1x, https://static.intercomassets.com/assets/oauth/primary@2x-0d69ca2141dfdfa0535634610be80994.png 2x, https://static.intercomassets.com/assets/oauth/primary@3x-788ed3c44d63a6aec3927285e920f542.png 3x"/>
|
3
|
+
</a>
|
2
4
|
<h1>Intercom application</h1>
|
3
|
-
<h2>Users list:</h2>
|
5
|
+
<!-- <h2>Users list:</h2>
|
4
6
|
<ul>
|
5
7
|
<% @users_names.each do | name | %>
|
6
8
|
<li> <%= name %></li>
|
7
|
-
<% end %>
|
9
|
+
<% end %> -->
|
8
10
|
</ul>
|
@@ -5,7 +5,7 @@ module IntercomApp
|
|
5
5
|
class_methods do
|
6
6
|
def store(sess)
|
7
7
|
app = self.find_or_initialize_by(intercom_app_id: sess[:intercom_app_id])
|
8
|
-
|
8
|
+
sess.each {|k,v| app[k] = v}
|
9
9
|
app.save!
|
10
10
|
app.id
|
11
11
|
end
|
@@ -13,11 +13,9 @@ module IntercomApp
|
|
13
13
|
def retrieve(id)
|
14
14
|
return unless id
|
15
15
|
if app = self.find_by(id: id)
|
16
|
-
session = {
|
17
|
-
|
18
|
-
|
19
|
-
token: app.intercom_token
|
20
|
-
}
|
16
|
+
session = {}
|
17
|
+
app.instance_variables{|k| session[k] = app[k]}
|
18
|
+
session
|
21
19
|
end
|
22
20
|
end
|
23
21
|
end
|
@@ -6,15 +6,22 @@ module IntercomApp
|
|
6
6
|
include IntercomApp::LoginProtection
|
7
7
|
end
|
8
8
|
|
9
|
+
def login
|
10
|
+
store_in_session_before_login.call(session, params) if store_in_session_before_login
|
11
|
+
end
|
12
|
+
|
9
13
|
def callback
|
10
14
|
if response = request.env['omniauth.auth']
|
11
15
|
app = {
|
12
|
-
|
13
|
-
intercom_app_id: response['extra']['raw_info']['app']['id_code']
|
16
|
+
intercom_token: response['credentials']['token'],
|
17
|
+
intercom_app_id: response['extra']['raw_info']['app']['id_code'],
|
18
|
+
name: response['extra']['raw_info']['name'],
|
19
|
+
email: response['extra']['raw_info']['email']
|
14
20
|
}
|
21
|
+
app = app.merge(callback_hash.call(session, response)) if callback_hash
|
15
22
|
session[:intercom] = IntercomApp::SessionRepository.store(app)
|
16
23
|
session[:intercom_app_id] = app[:intercom_app_id]
|
17
|
-
IntercomApp::WebhooksManager.new(intercom_token: app[:
|
24
|
+
IntercomApp::WebhooksManager.new(intercom_token: app[:intercom_token]).create_webhooks_subscriptions if IntercomApp.configuration.webhooks.present?
|
18
25
|
redirect_to return_address unless IntercomApp.configuration.oauth_modal
|
19
26
|
else
|
20
27
|
redirect_to login_url
|
@@ -24,6 +31,7 @@ module IntercomApp
|
|
24
31
|
def destroy
|
25
32
|
session[:intercom] = nil
|
26
33
|
session[:intercom_app_id] = nil
|
34
|
+
session[:intercom_token] = nil
|
27
35
|
redirect_to login_url
|
28
36
|
end
|
29
37
|
|
@@ -32,5 +40,12 @@ module IntercomApp
|
|
32
40
|
session.delete(:return_to) || '/'
|
33
41
|
end
|
34
42
|
|
43
|
+
def callback_hash
|
44
|
+
IntercomApp.configuration.callback_hash
|
45
|
+
end
|
46
|
+
|
47
|
+
def store_in_session_before_login
|
48
|
+
IntercomApp.configuration.store_in_session_before_login
|
49
|
+
end
|
35
50
|
end
|
36
51
|
end
|
data/lib/intercom-app/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: intercom-app
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kevin Antoine
|
@@ -195,8 +195,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
195
195
|
version: '0'
|
196
196
|
requirements: []
|
197
197
|
rubyforge_project:
|
198
|
-
rubygems_version: 2.
|
198
|
+
rubygems_version: 2.6.1
|
199
199
|
signing_key:
|
200
200
|
specification_version: 4
|
201
201
|
summary: Intercom.io ruby application boilerplate
|
202
202
|
test_files: []
|
203
|
+
has_rdoc:
|