intercom-app 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b1efe773248ef9439365870c93fc8eeb6157004f
4
- data.tar.gz: e3ded3e1132f4cbca3bf40c086f78fea84ccce7a
3
+ metadata.gz: cc04ec408e8cc21f7622eedb75808106f46a039e
4
+ data.tar.gz: ee6cb8896446949c3e2fe55bd386550296f0d657
5
5
  SHA512:
6
- metadata.gz: 61d69c7a3937c84d1f1647865eb1534e60eba03a64aedc40a6e678a4cafac329c582e2871f6acbc0fee0b129fd3271e2c6cbb73e220ba3d2b22d745c343e85d1
7
- data.tar.gz: d46307ce2dfa7d65080bf5d900a2a1ca95faed0826d1f7e947fa5514655937ad884bedf91d9a90db23d2a5cb3c12ed8355f26358af669c078bd7e473d4695d73
6
+ metadata.gz: b1749b716486ddc6bf4b75cd7ea400872823da73eecd422d02538172c25111273e9efafb7d33db439e45bf062d98b736f880ff2f5eda01fdcb9360a4b95d4e06
7
+ data.tar.gz: 7b2b3bc6fb9af331a6f229c290608c4911bc7e33a55753c5734df473bde6249914d20bf1ae9876b7138f4fd673765d39828df3ebd508da397f06bed250d2a29c
data/CHANGELOG.md ADDED
@@ -0,0 +1,21 @@
1
+ ## 0.1.0 (2016-07-08)
2
+
3
+ Features:
4
+
5
+ * Rails generator
6
+ * Intercom app sessions
7
+ * IntercomApp::App model
8
+ * Intercom Omniauth
9
+ * intercom_app initializer (@Skaelv)
10
+
11
+ ## 0.1.1 (2016-07-08)
12
+
13
+ * Add lib files to gemspec (@Skaelv)
14
+
15
+ ## 0.2.0 (2016-08-16)
16
+
17
+ * Fix test app crashes
18
+ * Fix webhooks subscription
19
+ * Webhooks verification
20
+ * Move LoginProtection to AuthenticatedController
21
+ * Create jobs for webhooks (@Skaelv)
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- intercom-app (0.1.0)
4
+ intercom-app (0.2.0)
5
5
  intercom (~> 3.5)
6
6
  omniauth-intercom (~> 0.1)
7
7
 
@@ -54,7 +54,7 @@ GEM
54
54
  activesupport (>= 4.1.0)
55
55
  hashie (3.4.4)
56
56
  i18n (0.7.0)
57
- intercom (3.5.1)
57
+ intercom (3.5.2)
58
58
  json (~> 1.8)
59
59
  json (1.8.3)
60
60
  jwt (1.5.4)
@@ -85,7 +85,7 @@ GEM
85
85
  omniauth (1.3.1)
86
86
  hashie (>= 1.2, < 4)
87
87
  rack (>= 1.0, < 3)
88
- omniauth-intercom (0.1.2)
88
+ omniauth-intercom (0.1.3)
89
89
  omniauth-oauth2 (~> 1.2)
90
90
  omniauth-oauth2 (1.4.0)
91
91
  oauth2 (~> 1.0)
@@ -137,12 +137,12 @@ PLATFORMS
137
137
 
138
138
  DEPENDENCIES
139
139
  bundler (~> 1.12)
140
- byebug
140
+ byebug (~> 9.0)
141
141
  intercom-app!
142
- mocha
143
- rails (~> 4.2.6)
142
+ mocha (~> 1.1)
143
+ rails (~> 4.2)
144
144
  rake (~> 10.0)
145
- sqlite3
145
+ sqlite3 (~> 1.3)
146
146
 
147
147
  BUNDLED WITH
148
148
  1.12.5
data/README.md CHANGED
@@ -3,6 +3,8 @@ Intercom App
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
+
6
8
  Description
7
9
  -----------
8
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 Oauth.
@@ -46,6 +48,8 @@ $ rails generate intercom_app --app_key <your_app_key> --app_secret <your_app_se
46
48
  - If false you can authenticate with Intercom directly from the current tab
47
49
 
48
50
 
51
+ *Note that you will need to run rake db:migrate after this generator*
52
+
49
53
  ### Install Generator
50
54
 
51
55
  ```sh
@@ -96,11 +100,29 @@ The `install` generator places your App credentials directly into the intercom_a
96
100
  ```ruby
97
101
  IntercomApp.configure do |config|
98
102
  config.api_key = ENV['INTERCOM_CLIENT_APP_KEY']
99
- config.secret = ENV['INTERCOM_CLIENT_APP_SECRET']
103
+ config.app_secret = ENV['INTERCOM_CLIENT_APP_SECRET']
100
104
  config.oauth_modal = false
101
105
  end
102
106
  ```
103
107
 
108
+ Webhooks Subscriptions
109
+ ----------------------
110
+
111
+ You can add your webhooks subscriptions to the `IntercomApp.config`. Subscriptions to your topics will be added on authentication callback.
112
+
113
+ ```ruby
114
+ IntercomApp.configure do |config|
115
+ config.webhooks = [
116
+ {topics: ['users'], url: 'https://my-intercom-app.com/webhooks/users'},
117
+ {topics: ['conversation.user.created', 'conversation.user.replied'], url: 'https://my-intercom-app.com/webhooks/conversations'},
118
+ {topics: ['event.created'], url: 'https://my-intercom-app.com/webhooks/conversations', metadata: { event_names: events } }
119
+ ]
120
+ end
121
+ ```
122
+
123
+ **Important** You will need to request the `manage_webhooks` permissions from Intercom to receive webhooks from Intercom.
124
+
125
+
104
126
  Connect to the Intercom API
105
127
  ----------------------
106
128
  This gem includes the following libraries :
data/RELEASING CHANGED
@@ -9,6 +9,6 @@ To release a new version of the intercom-ruby-app gem :
9
9
  6. Push the new tag :
10
10
  $ git push --tags
11
11
  7. Build the new gem :
12
- $ gem build intercom-ruby-app.gemspec
12
+ $ gem build intercom-app.gemspec
13
13
  8. Push the new gem :
14
- $ gem push intercom-ruby-app-X.Y.Z.gem
14
+ $ gem push intercom-app-X.Y.Z.gem
@@ -1,6 +1,7 @@
1
1
  module IntercomApp
2
2
  class AuthenticatedController < ApplicationController
3
- # before_action :login_again_if_different_app
3
+ include IntercomApp::LoginProtection
4
+
4
5
  around_action :intercom_session
5
6
  layout 'application'
6
7
  end
@@ -0,0 +1,33 @@
1
+ module IntercomApp
2
+ class WebhooksController < ApplicationController
3
+ skip_before_action :verify_authenticity_token
4
+
5
+ include IntercomApp::WebhookVerification
6
+
7
+ class IntercomApp::MissingWebhookJobDeclarationError < StandardError; end
8
+
9
+ def receive
10
+ webhook_job_klass.perform_later({app_id: app_id, webhook: webhook_params.to_h})
11
+ head :no_content
12
+ end
13
+
14
+ private
15
+
16
+ def webhook_params
17
+ params.except(:controller, :action, :type)
18
+ end
19
+
20
+ def webhook_job_klass
21
+ "#{webhook_type.sub('.','_').classify}Job".safe_constantize or raise IntercomApp::MissingWebhookJobDeclarationError
22
+ end
23
+
24
+ def webhook_type
25
+ params[:type]
26
+ end
27
+
28
+ def app_id
29
+ params[:app_id]
30
+ end
31
+
32
+ end
33
+ end
@@ -0,0 +1,23 @@
1
+ <% if IntercomApp.configuration.oauth_modal %>
2
+ <a href="javascript:void(0)" class="intercom-oauth-cta">
3
+ <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"/>
4
+ </a>
5
+ <script type="text/javascript">
6
+ $('.intercom-oauth-cta').unbind('click').click(function() {
7
+ var left = (screen.width/2)-(700/2);
8
+ var top = (screen.height/2)-(450/2);
9
+ var opts = 'width=700, height=450, top='+top+', left='+left
10
+ var auth_window = window.open('/auth/intercom', 'Sign in', opts);
11
+ var checkWindow = function() {
12
+ if (auth_window.closed) {
13
+ window.location = '/';
14
+ } else if (window.oauth_success === undefined) {
15
+ setTimeout(checkWindow, 200);
16
+ }
17
+ };
18
+ checkWindow();
19
+ });
20
+ </script>
21
+ <% else %>
22
+ <a href="/auth/intercom">Login</a>
23
+ <% end %>
data/config/routes.rb CHANGED
@@ -4,4 +4,8 @@ IntercomApp::Engine.routes.draw do
4
4
  get 'auth/intercom/callback' => :callback
5
5
  get 'logout' => :destroy, :as => :logout
6
6
  end
7
+
8
+ namespace :webhooks do
9
+ post ':type' => :receive
10
+ end
7
11
  end
data/intercom-app.gemspec CHANGED
@@ -7,7 +7,7 @@ Gem::Specification.new do |s|
7
7
  s.version = IntercomApp::VERSION
8
8
  s.date = '2016-07-04'
9
9
  s.summary = "Intercom.io ruby application boilerplate"
10
- s.description = "This gem helps you to get started with your Intercom.io app"
10
+ s.description = "This gem helps you to get started with your Intercom app"
11
11
  s.authors = ["Kevin Antoine"]
12
12
  s.email = 'kevin.antoine@intercom.io'
13
13
  s.files = ["lib/intercom-app.rb"]
@@ -17,13 +17,15 @@ Gem::Specification.new do |s|
17
17
  s.require_paths = ["lib"]
18
18
  s.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
19
19
 
20
- s.add_runtime_dependency 'intercom', '~>3.5'
20
+ s.required_ruby_version = '>= 2.2.2'
21
+
22
+ s.add_runtime_dependency 'intercom', '~> 3.5'
21
23
  s.add_runtime_dependency 'omniauth-intercom', '~>0.1'
22
24
 
23
25
  s.add_development_dependency 'rails', '~> 4.2'
24
- s.add_development_dependency 'sqlite3', '~> 0'
25
- s.add_development_dependency 'mocha', '~> 0'
26
- s.add_development_dependency 'byebug', '~> 0'
26
+ s.add_development_dependency 'sqlite3', '~> 1.3'
27
+ s.add_development_dependency 'mocha', '~> 1.1'
28
+ s.add_development_dependency 'byebug', '~> 9.0'
27
29
  s.add_development_dependency 'bundler', '~> 1.12'
28
30
  s.add_development_dependency 'rake', '~> 10.0'
29
31
  end
@@ -34,7 +34,8 @@ module IntercomApp
34
34
 
35
35
  # for generating a timestamp when using `create_migration`
36
36
  def self.next_migration_number(dir)
37
- ActiveRecord::Generators::Base.next_migration_number(dir)
37
+ Time.now.utc.strftime("%Y%m%d%H%M%S")
38
+ # ActiveRecord::Migration.next_migration_number(dir)
38
39
  end
39
40
  end
40
41
  end
@@ -1,6 +1,6 @@
1
- class HomeController < ApplicationController
1
+ class HomeController < IntercomApp::AuthenticatedController
2
+
2
3
  def index
3
- @users_count = @intercom_client.users.all.count()
4
- @users_names = @intercom_client.users.all.map(&:name)
4
+ @users_names = @intercom_client.users.find_all(:type=>'users', :per_page => 10, :page => 1, :order => "desc", :sort => "created_at").map(&:name)
5
5
  end
6
6
  end
@@ -1,26 +1,6 @@
1
- <% if IntercomApp.configuration.oauth_modal %>
2
- <a href="javascript:void(0)" class="intercom-oauth-cta">
3
- <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"/>
4
- </a>
5
- <script type="text/javascript">
6
- $('.intercom-oauth-cta').unbind('click').click(function() {
7
- var auth_window = window.open('/auth/intercom', 'Sign in', 'width=700,height=450');
8
- var checkWindow = function() {
9
- if (auth_window.closed) {
10
- window.location = '/';
11
- } else if (window.oauth_success === undefined) {
12
- setTimeout(checkWindow, 200);
13
- }
14
- };
15
- checkWindow();
16
- });
17
- </script>
18
- <% else %>
19
- <a href="/auth/intercom">Login</a>
20
- <% end %>
21
-
1
+ <a href="/login">Login</a>
22
2
  <h1>Intercom application</h1>
23
- <h2>List your <%= @users_count %> Intercom Users names :</h2>
3
+ <h2>Users list:</h2>
24
4
  <ul>
25
5
  <% @users_names.each do | name | %>
26
6
  <li> <%= name %></li>
@@ -1,20 +1,25 @@
1
1
  require 'rails/generators/base'
2
2
  require 'rails/generators/active_record'
3
+ require 'intercom-app/hub_secret_generator'
4
+
3
5
 
4
6
  module IntercomApp
5
7
  module Generators
6
8
  class InstallGenerator < Rails::Generators::Base
7
9
  include Rails::Generators::Migration
10
+ include IntercomApp::Utils
8
11
  source_root File.expand_path('../templates', __FILE__)
9
12
 
10
13
  class_option :app_key, type: :string, default: '<app_key>'
11
14
  class_option :app_secret, type: :string, default: '<app_secret>'
12
15
  class_option :oauth_modal, type: :boolean, default: false
16
+ class_option :hub_secret, type: :string
13
17
 
14
18
  def create_intercom_app_initializer
15
19
  @app_key = options['app_key']
16
20
  @app_secret = options['app_secret']
17
21
  @oauth_modal = options['oauth_modal']
22
+ @hub_secret = generate_hub_secret
18
23
 
19
24
  template 'intercom_app.rb', 'config/initializers/intercom_app.rb'
20
25
  end
@@ -35,19 +40,20 @@ module IntercomApp
35
40
  copy_file 'intercom_session_repository.rb', 'config/initializers/intercom_session_repository.rb'
36
41
  end
37
42
 
38
-
39
- def inject_into_application_controller
40
- inject_into_class(
41
- "app/controllers/application_controller.rb",
42
- 'ApplicationController',
43
- " include IntercomApp::LoginProtection\n"
44
- )
45
- end
46
-
47
43
  def mount_engine
48
44
  route "mount IntercomApp::Engine, at: '/'"
49
45
  end
50
46
 
47
+ private
48
+
49
+ def generate_hub_secret
50
+ if yes?("In order to increase the safety of your app, would you like your webhooks to be automatically signed?(y/n)")
51
+ return random_hub_secret
52
+ else
53
+ return ''
54
+ end
55
+ end
56
+
51
57
  end
52
58
  end
53
59
  end
@@ -1,5 +1,6 @@
1
1
  IntercomApp.configure do |config|
2
2
  config.app_key = "<%= @app_key %>"
3
3
  config.app_secret = "<%= @app_secret %>"
4
+ config.hub_secret = "<%= @hub_secret %>"
4
5
  config.oauth_modal = <%= @oauth_modal %>
5
6
  end
data/lib/intercom-app.rb CHANGED
@@ -2,11 +2,14 @@ require 'intercom-app/version'
2
2
  require 'intercom-app/app'
3
3
  require 'intercom-app/configuration'
4
4
  require 'intercom-app/engine'
5
+ require 'intercom-app/hub_secret_generator'
5
6
  require 'intercom-app/in_memory_session_store'
6
7
  require 'intercom-app/login_protection'
7
8
  require 'intercom-app/session_repository'
8
9
  require 'intercom-app/session_storage'
9
10
  require 'intercom-app/sessions_concern'
11
+ require 'intercom-app/webhook_verification'
12
+ require 'intercom-app/webhooks_manager'
10
13
 
11
14
  # deps
12
15
  require 'intercom'
@@ -4,6 +4,8 @@ module IntercomApp
4
4
  attr_accessor :app_key
5
5
  attr_accessor :app_secret
6
6
  attr_accessor :oauth_modal
7
+ attr_accessor :webhooks
8
+ attr_accessor :hub_secret
7
9
 
8
10
  def initialize
9
11
  end
@@ -0,0 +1,14 @@
1
+ require 'digest/sha1'
2
+
3
+ module IntercomApp
4
+ module Utils
5
+
6
+ def random_string
7
+ (0...20).map { (65 + rand(26)).chr }.join
8
+ end
9
+
10
+ def random_hub_secret
11
+ Digest::SHA1.hexdigest random_string
12
+ end
13
+ end
14
+ end
@@ -9,7 +9,7 @@ module IntercomApp
9
9
  def intercom_session
10
10
  if app_session
11
11
  begin
12
- @intercom_client = Intercom::Client.new(app_id: app_session[:token], api_key: '')
12
+ @intercom_client = Intercom::Client.new(token: app_session[:token])
13
13
  yield
14
14
  end
15
15
  else
@@ -2,8 +2,8 @@ module IntercomApp
2
2
  module SessionsConcern
3
3
  extend ActiveSupport::Concern
4
4
 
5
- def login
6
- redirect_to login_url
5
+ included do
6
+ include IntercomApp::LoginProtection
7
7
  end
8
8
 
9
9
  def callback
@@ -14,6 +14,7 @@ module IntercomApp
14
14
  }
15
15
  session[:intercom] = IntercomApp::SessionRepository.store(app)
16
16
  session[:intercom_app_id] = app[:intercom_app_id]
17
+ IntercomApp::WebhooksManager.new(intercom_token: app[:token]).create_webhooks if IntercomApp.configuration.webhooks.present?
17
18
  redirect_to return_address unless IntercomApp.configuration.oauth_modal
18
19
  else
19
20
  redirect_to login_url
@@ -1,3 +1,3 @@
1
1
  module IntercomApp
2
- VERSION = '0.1.1'
2
+ VERSION = '0.2.0'
3
3
  end
@@ -0,0 +1,26 @@
1
+ module IntercomApp
2
+ module WebhookVerification
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ before_action :verify_request
7
+ end
8
+
9
+ private
10
+ def verify_request
11
+ body = request.body.read
12
+ return head :unauthorized unless hmac_valid?(body)
13
+ end
14
+
15
+ def hmac_valid?(payload_body)
16
+ secret = IntercomApp.configuration.hub_secret
17
+ signature = 'sha1=' + OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha1'), secret, payload_body)
18
+ Rack::Utils.secure_compare(signature, intercom_hmac)
19
+ end
20
+
21
+ def intercom_hmac
22
+ request.headers['X-Hub-Signature']
23
+ end
24
+
25
+ end
26
+ end
@@ -0,0 +1,60 @@
1
+ module IntercomApp
2
+ class WebhooksManager
3
+ class CreationFailed < StandardError; end
4
+ def initialize(params)
5
+ @intercom_token = params[:intercom_token]
6
+ end
7
+
8
+ def create_webhooks_subscriptions
9
+ return unless required_webhooks.present?
10
+ required_webhooks.each do |webhook|
11
+ create_webhook_subscription(webhook) unless webhook_subscription_exists?(webhook[:topics])
12
+ end
13
+ end
14
+
15
+ def destroy_webhooks_subscriptions
16
+ intercom_client.subscriptions.all.each do |webhook|
17
+ intercom_client.subscriptions.delete(webhook.id) if is_required_webhook?(webhook)
18
+ end
19
+
20
+ @current_webhooks_subscriptions = nil
21
+ end
22
+
23
+ def recreate_webhooks_subscriptions!
24
+ destroy_webhooks_subscriptions
25
+ create_webhooks_subscriptions
26
+ end
27
+
28
+ private
29
+
30
+ def intercom_client
31
+ @intercom_client ||= Intercom::Client.new(app_id: @intercom_token, api_key: '')
32
+ end
33
+
34
+ def required_webhooks
35
+ IntercomApp.configuration.webhooks
36
+ end
37
+
38
+ def is_required_webhook?(webhook)
39
+ required_webhooks.map{ |w| w[:url] }.include? webhook.url
40
+ end
41
+
42
+ def create_webhook_subscription(attributes)
43
+ add_hub_secret_to_subscription(attributes)
44
+ webhook = intercom_client.subscriptions.create(attributes)
45
+ end
46
+
47
+ def webhook_subscription_exists?(topics)
48
+ current_webhooks_subscriptions[topics]
49
+ end
50
+
51
+ def current_webhooks_subscriptions
52
+ @current_webhooks_subscriptions ||= intercom_client.subscriptions.all.index_by(&:topics)
53
+ end
54
+
55
+ def add_hub_secret_to_subscription(attributes)
56
+ attributes[:hub_secret] = IntercomApp.configuration.hub_secret if IntercomApp.configuration.hub_secret.present?
57
+ end
58
+
59
+ end
60
+ end
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.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin Antoine
@@ -58,42 +58,42 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: '1.3'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '0'
68
+ version: '1.3'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: mocha
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '0'
75
+ version: '1.1'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '0'
82
+ version: '1.1'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: byebug
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '0'
89
+ version: '9.0'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '0'
96
+ version: '9.0'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: bundler
99
99
  requirement: !ruby/object:Gem::Requirement
@@ -122,7 +122,7 @@ dependencies:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
124
  version: '10.0'
125
- description: This gem helps you to get started with your Intercom.io app
125
+ description: This gem helps you to get started with your Intercom app
126
126
  email: kevin.antoine@intercom.io
127
127
  executables: []
128
128
  extensions: []
@@ -132,7 +132,7 @@ files:
132
132
  - ".gitignore"
133
133
  - ".rspec"
134
134
  - ".travis.yml"
135
- - CHANGELOG
135
+ - CHANGELOG.md
136
136
  - Gemfile
137
137
  - Gemfile.lock
138
138
  - LICENSE
@@ -141,8 +141,10 @@ files:
141
141
  - Rakefile
142
142
  - app/controllers/intercom_app/authenticated_controller.rb
143
143
  - app/controllers/intercom_app/sessions_controller.rb
144
+ - app/controllers/intercom_app/webhooks_controller.rb
144
145
  - app/models/intercom-app/app.rb
145
146
  - app/views/intercom_app/sessions/callback.html.erb
147
+ - app/views/intercom_app/sessions/login.html.erb
146
148
  - config/routes.rb
147
149
  - intercom-app.gemspec
148
150
  - lib/generators/intercom_app/app_model/app_model_generator.rb
@@ -164,12 +166,15 @@ files:
164
166
  - lib/intercom-app/app.rb
165
167
  - lib/intercom-app/configuration.rb
166
168
  - lib/intercom-app/engine.rb
169
+ - lib/intercom-app/hub_secret_generator.rb
167
170
  - lib/intercom-app/in_memory_session_store.rb
168
171
  - lib/intercom-app/login_protection.rb
169
172
  - lib/intercom-app/session_repository.rb
170
173
  - lib/intercom-app/session_storage.rb
171
174
  - lib/intercom-app/sessions_concern.rb
172
175
  - lib/intercom-app/version.rb
176
+ - lib/intercom-app/webhook_verification.rb
177
+ - lib/intercom-app/webhooks_manager.rb
173
178
  homepage: http://rubygems.org/gems/intercom-ruby-app
174
179
  licenses:
175
180
  - MIT
@@ -182,7 +187,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
182
187
  requirements:
183
188
  - - ">="
184
189
  - !ruby/object:Gem::Version
185
- version: '0'
190
+ version: 2.2.2
186
191
  required_rubygems_version: !ruby/object:Gem::Requirement
187
192
  requirements:
188
193
  - - ">="
@@ -190,8 +195,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
190
195
  version: '0'
191
196
  requirements: []
192
197
  rubyforge_project:
193
- rubygems_version: 2.4.8
198
+ rubygems_version: 2.5.1
194
199
  signing_key:
195
200
  specification_version: 4
196
201
  summary: Intercom.io ruby application boilerplate
197
202
  test_files: []
203
+ has_rdoc:
data/CHANGELOG DELETED
@@ -1,7 +0,0 @@
1
- 0.1.0
2
- -----
3
- * Rails generator
4
- * Intercom app sessions
5
- * IntercomApp::App model
6
- * Intercom Omniauth
7
- * intercom_app initializer