bobot 4.13.1 → 4.14.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
  SHA256:
3
- metadata.gz: fea75dd1ce76f17fb665eb9b75fc4d5086302de0f484dbb5f7b378d7fbd05d7f
4
- data.tar.gz: 4cfcd52a2006ab9bceb2ca5905df48a1b1566ce384d26ee63f810e88a607fdfd
3
+ metadata.gz: 312aa2653634d73327d66899611310da2c5c7a0514f2bc84afaba332fc31046c
4
+ data.tar.gz: fa5a7192eafc0455aafb79cedebe9265dc19d1601a4f4adc826ec70145aec170
5
5
  SHA512:
6
- metadata.gz: 82c1c545c8d2f26fcdf0cc41bde4bf8b83d877451423f83f48330ddbb611b31ed40a7b70aa5c90109fbc5725f3bac86b2a6faa70f7310938a46d00597508b7b0
7
- data.tar.gz: 90155f520bc068e75cc0b40f87bd1b2e02654e0d58db5c8c5ff77876421e7b2ebc52b0c6362052f1740607914005fa43afd96e580e91bd654172b3467651c1ba
6
+ metadata.gz: b99c9349bf4c1109903185ee22ee0f4b4836f08b5f740291c3db9617968b6835bd94370bbec1bfdf5256033676aebc58fd3a01dd4c4ccef41f6cd23697a81c41
7
+ data.tar.gz: 54f1101c0b51195ec3a5fbeca6ef52b951827807609086c498470039571505bee321b970112790938a21be122230b20d8ed2e7a06b0c319f39237228ab74c32f
@@ -8,6 +8,8 @@ module Bobot
8
8
  some time, check your app's secret token.
9
9
  HEREDOC
10
10
 
11
+ OPEN_SSL_AUTHENTICATION_CODE = OpenSSL::Digest.new('sha1'.freeze)
12
+
11
13
  def webhook
12
14
  if request.get?
13
15
  verify
@@ -44,7 +46,7 @@ module Bobot
44
46
  def parsed_body
45
47
  @parsed_body ||= ActiveSupport::JSON.decode(body)
46
48
  rescue ::ActiveSupport::JSON.parse_error
47
- raise BadRequestError.new("Error parsing request body format")
49
+ raise BadRequestError.new("Error parsing request body format".freeze)
48
50
  end
49
51
 
50
52
  def valid_signature?
@@ -52,7 +54,7 @@ module Bobot
52
54
  end
53
55
 
54
56
  def generate_hmac(content)
55
- OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha1'.freeze), Bobot.config.app_secret, content)
57
+ OpenSSL::HMAC.hexdigest(self.class::OPEN_SSL_AUTHENTICATION_CODE, Bobot.config.app_secret, content)
56
58
  end
57
59
 
58
60
  def signature_for(string)
@@ -71,12 +73,10 @@ module Bobot
71
73
  signature =~ /\Asha1=([0-9a-z]{40})\z/
72
74
  hub_signature = Regexp.last_match(1)
73
75
  unless hub_signature
74
- Rails.logger.error(X_HUB_SIGNATURE_MISSING_WARNING)
76
+ Rails.logger.error(self.class::X_HUB_SIGNATURE_MISSING_WARNING)
75
77
  raise BadRequestError.new("Error getting integrity signature".freeze)
76
78
  end
77
- unless valid_signature?
78
- raise BadRequestError.new("Error checking message integrity".freeze)
79
- end
79
+ raise BadRequestError.new("Error checking message integrity".freeze) unless valid_signature?
80
80
  end
81
81
 
82
82
  def trigger(events)
@@ -84,6 +84,9 @@ module Bobot
84
84
  entry['messaging'.freeze].to_a.each do |messaging|
85
85
  Bobot::Commander.receive(messaging)
86
86
  end
87
+ entry['standby'.freeze].to_a.each do |standby|
88
+ Bobot::Commander.receive(standby) if standby["message".freeze]
89
+ end
87
90
  end
88
91
  end
89
92
  end
@@ -14,15 +14,20 @@ module Bobot
14
14
  message_request
15
15
  policy-enforcement
16
16
  pass_thread_control
17
+ take_thread_control
17
18
  ].freeze
18
19
 
19
20
  include Bobot::GraphFacebook
20
21
 
21
22
  class << self
22
- def deliver(body:, query:)
23
- graph_post '/me/messages', body: body, query: {
24
- access_token: query.fetch(:access_token),
25
- }
23
+ def deliver(endpoint: '/me/messages', body:, query:)
24
+ graph_post(
25
+ endpoint,
26
+ body: body,
27
+ query: {
28
+ access_token: query.fetch(:access_token),
29
+ },
30
+ )
26
31
  end
27
32
 
28
33
  def on(event, &block)
@@ -35,10 +40,8 @@ module Bobot
35
40
 
36
41
  def receive(payload)
37
42
  event = Bobot::Event.parse(payload)
38
- return unless event.page.present?
39
-
43
+ event.mark_as_seen if event.page.present? && [Bobot::Event::MessageEcho, Bobot::Event::PassThreadControl, Bobot::Event::TakeThreadControl].none? { |c| event.is_a?(c) }
40
44
  hooks.fetch(Bobot::Event::EVENTS.invert[event.class].to_sym)
41
- event.mark_as_seen
42
45
  Bobot::CommanderJob.send(
43
46
  Bobot.config.async ? :perform_later : :perform_now,
44
47
  { payload: payload },
@@ -49,7 +52,7 @@ module Bobot
49
52
 
50
53
  def trigger(payload)
51
54
  event = Bobot::Event.parse(payload)
52
- return unless event.page.present?
55
+ return if !event.page.present?
53
56
 
54
57
  hook = hooks.fetch(Bobot::Event::EVENTS.invert[event.class].to_sym)
55
58
  hook.call(event)
@@ -9,6 +9,7 @@ require 'bobot/events/account_linking'
9
9
  require 'bobot/events/referral'
10
10
  require 'bobot/events/policy_enforcement'
11
11
  require 'bobot/events/pass_thread_control'
12
+ require 'bobot/events/take_thread_control'
12
13
 
13
14
  module Bobot
14
15
  module Event
@@ -23,6 +24,7 @@ module Bobot
23
24
  'message_echo' => MessageEcho,
24
25
  'policy-enforcement' => PolicyEnforcement,
25
26
  'pass_thread_control' => PassThreadControl,
27
+ 'take_thread_control' => TakeThreadControl,
26
28
  }.freeze
27
29
 
28
30
  def self.parse(payload)
@@ -9,11 +9,11 @@ module Bobot
9
9
  end
10
10
 
11
11
  def sender
12
- @messaging['sender']
12
+ @messaging[is_a?(Bobot::Event::MessageEcho) ? 'recipient' : 'sender']
13
13
  end
14
14
 
15
15
  def recipient
16
- @messaging['recipient']
16
+ @messaging[is_a?(Bobot::Event::MessageEcho) ? 'sender' : 'recipient']
17
17
  end
18
18
 
19
19
  # If the user responds to your message, the appropriate event
@@ -29,6 +29,14 @@ module Bobot
29
29
  Time.zone.at(@messaging['timestamp'] / 1000)
30
30
  end
31
31
 
32
+ def send_take_thread_control(metadata: nil)
33
+ page.deliver_take_thread_control(to: sender["id"], metadata: metadata)
34
+ end
35
+
36
+ def send_pass_thread_control(target_app_id:, metadata: nil)
37
+ page.deliver_pass_thread_control(to: sender["id"], metadata: metadata, target_app_id: target_app_id)
38
+ end
39
+
32
40
  def sender_action(sender_action:, messaging_options: nil)
33
41
  page.sender_action(sender_action: sender_action, to: sender["id"], messaging_options: messaging_options)
34
42
  end
@@ -1,9 +1,6 @@
1
1
  module Bobot
2
2
  module Event
3
3
  class MessageEcho < Message
4
- def access_token
5
- Bobot::Page.find(sender["id"])
6
- end
7
4
  end
8
5
  end
9
6
  end
@@ -0,0 +1,15 @@
1
+ module Bobot
2
+ module Event
3
+ class TakeThreadControl
4
+ include Bobot::Event::Common
5
+
6
+ def previous_owner_app_id
7
+ @messaging['take_thread_control']['previous_owner_app_id ']
8
+ end
9
+
10
+ def metadata
11
+ @messaging['take_thread_control']['metadata']
12
+ end
13
+ end
14
+ end
15
+ end
@@ -34,6 +34,26 @@ module Bobot
34
34
  #
35
35
  #####################################
36
36
 
37
+ def deliver_take_thread_control(to:, metadata: nil)
38
+ body = { recipient: { id: to }, metadata: metadata }
39
+ query = { access_token: page_access_token }
40
+ Bobot::Commander.deliver(
41
+ endpoint: '/me/take_thread_control',
42
+ body: body,
43
+ query: query,
44
+ )
45
+ end
46
+
47
+ def deliver_pass_thread_control(to:, metadata: nil, target_app_id:)
48
+ body = { recipient: { id: to }, target_app_id: target_app_id, metadata: metadata }
49
+ query = { access_token: page_access_token }
50
+ Bobot::Commander.deliver(
51
+ endpoint: '/me/pass_thread_control',
52
+ body: body,
53
+ query: query,
54
+ )
55
+ end
56
+
37
57
  def deliver(payload_template:, to:)
38
58
  if payload_template.present?
39
59
  if payload_template.key?(:messaging_options) && !payload_template[:messaging_options].nil? && payload_template[:messaging_options].key?(:messaging_type)
@@ -49,11 +69,12 @@ module Bobot
49
69
  body = { recipient: { id: to }, messaging_type: "RESPONSE" }.merge(payload_template).merge(payload_template[:messaging_options] || {})
50
70
  query = { access_token: page_access_token }
51
71
  Bobot::Commander.deliver(
72
+ endpoint: '/me/messages',
52
73
  body: body,
53
74
  query: query,
54
75
  )
55
76
  end
56
-
77
+
57
78
  def sender_action(sender_action:, to: nil, messaging_options: nil)
58
79
  deliver(payload_template: { sender_action: sender_action, messaging_options: messaging_options }, to: to)
59
80
  end
@@ -1,8 +1,8 @@
1
1
  module Bobot
2
2
  class Version
3
3
  MAJOR = 4
4
- MINOR = 13
5
- PATCH = 1
4
+ MINOR = 14
5
+ PATCH = 0
6
6
  PRE = nil
7
7
 
8
8
  class << self
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bobot
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.13.1
4
+ version: 4.14.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Navid EMAD
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-02-21 00:00:00.000000000 Z
11
+ date: 2019-02-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: i18n
@@ -96,6 +96,7 @@ files:
96
96
  - lib/bobot/events/postback.rb
97
97
  - lib/bobot/events/read.rb
98
98
  - lib/bobot/events/referral.rb
99
+ - lib/bobot/events/take_thread_control.rb
99
100
  - lib/bobot/exceptions.rb
100
101
  - lib/bobot/graph_facebook.rb
101
102
  - lib/bobot/page.rb