intercom-rails 1.0.1 → 1.0.4

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
  SHA256:
3
- metadata.gz: e2fc85ba00358eada296192f07e67ba84f37424ba7a5d8ee9ea5f83e5a0bc60b
4
- data.tar.gz: e3f4bfc29ba15e72c9f19c3c363abeb587ff6668637740edee063c69a329d648
3
+ metadata.gz: 6a0dbbf87c42ebfc8d7ef419b8419c603affa9b404c60aa24fb08d9b97a4d497
4
+ data.tar.gz: 4d651bdef674633a6f2ace4576a8450e97edfb176f05af5227676cebe1568c61
5
5
  SHA512:
6
- metadata.gz: eb3a484b71432a961158d13ee67bc43e867d74e4ecfad7d81b58607e7f09aeacb6f9e002df29b3028ac3e71717cece13a2251a0d7a5636ba67264c59465a5167
7
- data.tar.gz: 689566c0e89a88620c018c41e8c49ff23e5aeedc32c180f0684e94d27b2112ba0ce13d5c691a89fa7db0a492352962e41be6e831a8855536fac5c6cfb557d782
6
+ metadata.gz: 736a52b2db369ed6e3716dbac46cd1b30b333644c7a248d45ebceeb2e2c0a7ffc2eb8bb7032c0ba6d931ec715b7356dbfc66f802239d0a437f4a477466c4c388
7
+ data.tar.gz: d3dce65e7f52e5ca96104a65b63434fd2dff1bdd5652a533e2cd9dd13afb00c74d23153d2658ad01e4ba8b0dfb90d5bf5711c49265e94f56d5ff92222518a6fb
@@ -110,6 +110,7 @@ module IntercomRails
110
110
  config_accessor :hide_default_launcher
111
111
  config_accessor :api_base
112
112
  config_accessor :encrypted_mode
113
+ config_accessor :jwt_enabled
113
114
 
114
115
  def self.api_key=(*)
115
116
  warn "Setting an Intercom API key is no longer supported; remove the `config.api_key = ...` line from config/initializers/intercom.rb"
@@ -2,6 +2,7 @@
2
2
 
3
3
  require 'active_support/all'
4
4
  require 'action_view'
5
+ require 'jwt'
5
6
 
6
7
  module IntercomRails
7
8
 
@@ -17,7 +18,7 @@ module IntercomRails
17
18
  include ::ActionView::Helpers::TagHelper
18
19
 
19
20
  attr_reader :user_details, :company_details, :show_everywhere, :session_duration
20
- attr_accessor :secret, :widget_options, :controller, :nonce, :encrypted_mode_enabled, :encrypted_mode
21
+ attr_accessor :secret, :widget_options, :controller, :nonce, :encrypted_mode_enabled, :encrypted_mode, :jwt_enabled
21
22
 
22
23
  def initialize(options = {})
23
24
  self.secret = options[:secret] || Config.api_secret
@@ -25,14 +26,21 @@ module IntercomRails
25
26
  self.controller = options[:controller]
26
27
  @show_everywhere = options[:show_everywhere]
27
28
  @session_duration = session_duration_from_config
28
- self.user_details = options[:find_current_user_details] ? find_current_user_details : options[:user_details]
29
+ self.jwt_enabled = options[:jwt_enabled] || Config.jwt_enabled
30
+
31
+ initial_user_details = if options[:find_current_user_details]
32
+ find_current_user_details
33
+ else
34
+ options[:user_details] || {}
35
+ end
36
+
37
+ lead_attributes = find_lead_attributes
38
+
39
+ self.user_details = initial_user_details.merge(lead_attributes)
29
40
 
30
41
  self.encrypted_mode_enabled = options[:encrypted_mode] || Config.encrypted_mode
31
42
  self.encrypted_mode = IntercomRails::EncryptedMode.new(secret, options[:initialization_vector], {:enabled => encrypted_mode_enabled})
32
43
 
33
- # Request specific custom data for non-signed up users base on lead_attributes
34
- self.user_details = self.user_details.merge(find_lead_attributes)
35
-
36
44
  self.company_details = if options[:find_current_company_details]
37
45
  find_current_company_details
38
46
  elsif options[:user_details]
@@ -113,12 +121,30 @@ module IntercomRails
113
121
  "window.intercomSettings = #{plaintext_javascript};#{intercom_encrypted_payload_javascript}(function(){var w=window;var ic=w.Intercom;if(typeof ic===\"function\"){ic('update',intercomSettings);}else{var d=document;var i=function(){i.c(arguments)};i.q=[];i.c=function(args){i.q.push(args)};w.Intercom=i;function l(){var s=d.createElement('script');s.type='text/javascript';s.async=true;s.src='#{Config.library_url || "https://widget.intercom.io/widget/#{j app_id}"}';var x=d.getElementsByTagName('script')[0];x.parentNode.insertBefore(s,x);}if(document.readyState==='complete'){l();}else if(w.attachEvent){w.attachEvent('onload',l);}else{w.addEventListener('load',l,false);}};})()"
114
122
  end
115
123
 
124
+ def generate_jwt
125
+ return nil unless user_details[:user_id].present?
126
+
127
+ payload = {
128
+ user_id: user_details[:user_id].to_s,
129
+ exp: 24.hours.from_now.to_i
130
+ }
131
+ JWT.encode(payload, secret, 'HS256')
132
+ end
133
+
116
134
  def user_details=(user_details)
117
135
  @user_details = DateHelper.convert_dates_to_unix_timestamps(user_details || {})
118
136
  @user_details = @user_details.with_indifferent_access.tap do |u|
119
137
  [:email, :name, :user_id].each { |k| u.delete(k) if u[k].nil? }
120
138
 
121
- u[:user_hash] ||= user_hash if secret.present? && (u[:user_id] || u[:email]).present?
139
+ if secret.present?
140
+ if jwt_enabled && u[:user_id].present?
141
+ u[:intercom_user_jwt] ||= generate_jwt
142
+ u.delete(:user_id) # No need to send plaintext user_id when using JWT
143
+ elsif (u[:user_id] || u[:email]).present?
144
+ u[:user_hash] ||= user_hash
145
+ end
146
+ end
147
+
122
148
  u[:app_id] ||= app_id
123
149
  end
124
150
  end
@@ -1,3 +1,3 @@
1
1
  module IntercomRails
2
- VERSION = "1.0.1"
2
+ VERSION = "1.0.4"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: intercom-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben McRedmond
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2024-04-08 00:00:00.000000000 Z
13
+ date: 2024-12-19 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activesupport
@@ -26,6 +26,20 @@ dependencies:
26
26
  - - ">"
27
27
  - !ruby/object:Gem::Version
28
28
  version: '4.0'
29
+ - !ruby/object:Gem::Dependency
30
+ name: jwt
31
+ requirement: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - "~>"
34
+ - !ruby/object:Gem::Version
35
+ version: '2.0'
36
+ type: :runtime
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - "~>"
41
+ - !ruby/object:Gem::Version
42
+ version: '2.0'
29
43
  - !ruby/object:Gem::Dependency
30
44
  name: rake
31
45
  requirement: !ruby/object:Gem::Requirement
@@ -102,28 +116,14 @@ dependencies:
102
116
  requirements:
103
117
  - - "~>"
104
118
  - !ruby/object:Gem::Version
105
- version: '2.0'
106
- type: :development
107
- prerelease: false
108
- version_requirements: !ruby/object:Gem::Requirement
109
- requirements:
110
- - - "~>"
111
- - !ruby/object:Gem::Version
112
- version: '2.0'
113
- - !ruby/object:Gem::Dependency
114
- name: thin
115
- requirement: !ruby/object:Gem::Requirement
116
- requirements:
117
- - - "~>"
118
- - !ruby/object:Gem::Version
119
- version: 1.8.0
119
+ version: '3.0'
120
120
  type: :development
121
121
  prerelease: false
122
122
  version_requirements: !ruby/object:Gem::Requirement
123
123
  requirements:
124
124
  - - "~>"
125
125
  - !ruby/object:Gem::Version
126
- version: 1.8.0
126
+ version: '3.0'
127
127
  - !ruby/object:Gem::Dependency
128
128
  name: tzinfo
129
129
  requirement: !ruby/object:Gem::Requirement
@@ -202,7 +202,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
202
202
  - !ruby/object:Gem::Version
203
203
  version: '0'
204
204
  requirements: []
205
- rubygems_version: 3.4.10
205
+ rubygems_version: 3.5.22
206
206
  signing_key:
207
207
  specification_version: 4
208
208
  summary: Rails helper for emitting javascript script tags for Intercom