pubnub 4.2.5 → 4.5.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of pubnub might be problematic. Click here for more details.

Files changed (183) hide show
  1. checksums.yaml +4 -4
  2. data/.github/CODEOWNERS +1 -0
  3. data/.pubnub.yml +168 -117
  4. data/.travis.yml +13 -9
  5. data/CHANGELOG.md +31 -8
  6. data/Gemfile.lock +67 -64
  7. data/README.md +56 -17
  8. data/VERSION +1 -1
  9. data/fixtures/vcr_cassettes/examples/add_channels_to_push/001.yml +45 -0
  10. data/fixtures/vcr_cassettes/examples/add_channels_to_push/002.yml +45 -0
  11. data/fixtures/vcr_cassettes/examples/add_channels_to_push/003.yml +45 -0
  12. data/fixtures/vcr_cassettes/examples/add_channels_to_push/004.yml +45 -0
  13. data/fixtures/vcr_cassettes/examples/grant/1913.yml +1 -1
  14. data/fixtures/vcr_cassettes/examples/grant/1944.yml +8 -9
  15. data/fixtures/vcr_cassettes/examples/grant/1945.yml +359 -9
  16. data/fixtures/vcr_cassettes/examples/grant/1946.yml +8 -9
  17. data/fixtures/vcr_cassettes/examples/grant/1947.yml +8 -9
  18. data/fixtures/vcr_cassettes/examples/grant/1948.yml +8 -9
  19. data/fixtures/vcr_cassettes/examples/history/100.yml +46 -0
  20. data/fixtures/vcr_cassettes/examples/history/include_meta__encrypted.yml +46 -0
  21. data/fixtures/vcr_cassettes/examples/history/include_token__encrypted.yml +45 -0
  22. data/fixtures/vcr_cassettes/examples/history/no_includes__encrypted.yml +45 -0
  23. data/fixtures/vcr_cassettes/examples/list_push_provisions/001.yml +46 -0
  24. data/fixtures/vcr_cassettes/examples/list_push_provisions/002.yml +45 -0
  25. data/fixtures/vcr_cassettes/examples/list_push_provisions/003.yml +45 -0
  26. data/fixtures/vcr_cassettes/examples/remove_channels_from_push/001.yml +45 -0
  27. data/fixtures/vcr_cassettes/examples/remove_channels_from_push/002.yml +45 -0
  28. data/fixtures/vcr_cassettes/examples/remove_channels_from_push/003.yml +45 -0
  29. data/fixtures/vcr_cassettes/examples/remove_device_from_push/001.yml +45 -0
  30. data/fixtures/vcr_cassettes/examples/remove_device_from_push/002.yml +45 -0
  31. data/fixtures/vcr_cassettes/examples/remove_device_from_push/003.yml +45 -0
  32. data/fixtures/vcr_cassettes/lib/events/get_all_channels_metadata.yml +39 -0
  33. data/fixtures/vcr_cassettes/lib/events/get_all_uuid_metadata.yml +76 -0
  34. data/fixtures/vcr_cassettes/lib/events/get_channel_members.yml +37 -0
  35. data/fixtures/vcr_cassettes/lib/events/get_channel_metadata.yml +37 -0
  36. data/fixtures/vcr_cassettes/lib/events/get_memberships1.yml +37 -0
  37. data/fixtures/vcr_cassettes/lib/events/get_memberships2.yml +37 -0
  38. data/fixtures/vcr_cassettes/lib/events/get_uuid_metadata1.yml +76 -0
  39. data/fixtures/vcr_cassettes/lib/events/get_uuid_metadata2.yml +76 -0
  40. data/fixtures/vcr_cassettes/lib/events/grant-error.yml +2 -2
  41. data/fixtures/vcr_cassettes/lib/events/grant.yml +10 -11
  42. data/fixtures/vcr_cassettes/lib/events/remove_channel_members.yml +78 -0
  43. data/fixtures/vcr_cassettes/lib/events/{delete_space.yml → remove_channel_metadata.yml} +5 -6
  44. data/fixtures/vcr_cassettes/lib/events/{manage_memberships_remove.yml → remove_memberships1.yml} +8 -9
  45. data/fixtures/vcr_cassettes/lib/events/{manage_members_add.yml → remove_memberships2.yml} +8 -9
  46. data/fixtures/vcr_cassettes/lib/events/remove_uuid_metadata1.yml +76 -0
  47. data/fixtures/vcr_cassettes/lib/events/remove_uuid_metadata2.yml +76 -0
  48. data/fixtures/vcr_cassettes/lib/events/set_channel_members.yml +39 -0
  49. data/fixtures/vcr_cassettes/lib/events/set_channel_metadata.yml +39 -0
  50. data/fixtures/vcr_cassettes/lib/events/{manage_memberships_add.yml → set_memberships1.yml} +8 -9
  51. data/fixtures/vcr_cassettes/lib/events/set_memberships2.yml +39 -0
  52. data/fixtures/vcr_cassettes/lib/events/set_uuid_metadata1.yml +78 -0
  53. data/fixtures/vcr_cassettes/lib/events/set_uuid_metadata2.yml +78 -0
  54. data/fixtures/vcr_cassettes/lib/events/{subscribe-space-delete-async.yml → subscribe-channel-metadata-remove-sync.yml} +12 -14
  55. data/fixtures/vcr_cassettes/lib/events/subscribe-channel-metadata-set-async.yml +75 -0
  56. data/fixtures/vcr_cassettes/lib/events/{subscribe-member-remove-async.yml → subscribe-member-remove-sync.yml} +12 -14
  57. data/fixtures/vcr_cassettes/lib/events/subscribe-member-set-async.yml +75 -0
  58. data/fixtures/vcr_cassettes/lib/events/subscribe-membership-remove-async.yml +12 -14
  59. data/fixtures/vcr_cassettes/lib/events/{subscribe-user-update-async.yml → subscribe-membership-set-async.yml} +12 -14
  60. data/fixtures/vcr_cassettes/lib/events/{subscribe-user-delete-async.yml → subscribe-uuid-metadata-remove-sync.yml} +12 -14
  61. data/fixtures/vcr_cassettes/lib/events/subscribe-uuid-metadata-set-async.yml +75 -0
  62. data/lib/pubnub/client.rb +18 -15
  63. data/lib/pubnub/client/events.rb +4 -2
  64. data/lib/pubnub/client/paged_history.rb +1 -1
  65. data/lib/pubnub/constants.rb +19 -18
  66. data/lib/pubnub/event.rb +32 -16
  67. data/lib/pubnub/event/formatter.rb +4 -0
  68. data/lib/pubnub/event/signature.rb +22 -7
  69. data/lib/pubnub/events/add_channels_to_push.rb +29 -13
  70. data/lib/pubnub/events/get_all_channels_metadata.rb +104 -0
  71. data/lib/pubnub/events/get_all_uuid_metadata.rb +104 -0
  72. data/lib/pubnub/events/get_channel_members.rb +120 -0
  73. data/lib/pubnub/events/{update_space.rb → get_channel_metadata.rb} +27 -27
  74. data/lib/pubnub/events/get_memberships.rb +120 -0
  75. data/lib/pubnub/events/{create_space.rb → get_uuid_metadata.rb} +27 -25
  76. data/lib/pubnub/events/grant.rb +10 -1
  77. data/lib/pubnub/events/history.rb +17 -2
  78. data/lib/pubnub/events/list_push_provisions.rb +29 -12
  79. data/lib/pubnub/events/remove_channel_members.rb +137 -0
  80. data/lib/pubnub/events/{delete_space.rb → remove_channel_metadata.rb} +12 -12
  81. data/lib/pubnub/events/remove_channels_from_push.rb +29 -13
  82. data/lib/pubnub/events/remove_device_from_push.rb +30 -14
  83. data/lib/pubnub/events/remove_memberships.rb +137 -0
  84. data/lib/pubnub/events/{delete_user.rb → remove_uuid_metadata.rb} +12 -12
  85. data/lib/pubnub/events/set_channel_members.rb +140 -0
  86. data/lib/pubnub/events/{manage_members.rb → set_channel_metadata.rb} +32 -38
  87. data/lib/pubnub/events/set_memberships.rb +140 -0
  88. data/lib/pubnub/events/{create_user.rb → set_uuid_metadata.rb} +33 -17
  89. data/lib/pubnub/formatter.rb +30 -3
  90. data/lib/pubnub/pam.rb +2 -11
  91. data/lib/pubnub/subscribe_callback.rb +1 -3
  92. data/lib/pubnub/subscribe_event/formatter.rb +26 -17
  93. data/lib/pubnub/subscriber.rb +5 -6
  94. data/lib/pubnub/validators/add_channels_to_push.rb +52 -0
  95. data/lib/pubnub/validators/get_all_channels_metadata.rb +29 -0
  96. data/lib/pubnub/validators/get_all_uuid_metadata.rb +29 -0
  97. data/lib/pubnub/validators/get_channel_members.rb +39 -0
  98. data/lib/pubnub/validators/get_channel_metadata.rb +39 -0
  99. data/lib/pubnub/validators/get_memberships.rb +39 -0
  100. data/lib/pubnub/validators/get_uuid_metadata.rb +39 -0
  101. data/lib/pubnub/validators/grant.rb +37 -2
  102. data/lib/pubnub/validators/list_push_provisions.rb +43 -0
  103. data/lib/pubnub/validators/remove_channel_members.rb +52 -0
  104. data/lib/pubnub/validators/remove_channel_metadata.rb +39 -0
  105. data/lib/pubnub/validators/remove_channels_from_push.rb +52 -0
  106. data/lib/pubnub/validators/remove_device_from_push.rb +43 -0
  107. data/lib/pubnub/validators/remove_memberships.rb +52 -0
  108. data/lib/pubnub/validators/remove_uuid_metadata.rb +39 -0
  109. data/lib/pubnub/validators/set_channel_members.rb +78 -0
  110. data/lib/pubnub/validators/set_channel_metadata.rb +62 -0
  111. data/lib/pubnub/validators/set_memberships.rb +78 -0
  112. data/lib/pubnub/validators/set_uuid_metadata.rb +62 -0
  113. data/lib/pubnub/version.rb +1 -1
  114. data/pubnub.gemspec +1 -1
  115. data/spec/examples/add_channels_to_push_spec.rb +178 -0
  116. data/spec/examples/{grant_examples_spec.rb → grant_examples_1_spec.rb} +0 -8973
  117. data/spec/examples/grant_examples_2_spec.rb +9107 -0
  118. data/spec/examples/history_examples_spec.rb +85 -0
  119. data/spec/examples/list_push_provisions_spec.rb +164 -0
  120. data/spec/examples/presence_examples_spec.rb +222 -186
  121. data/spec/examples/remove_channels_from_push_spec.rb +164 -0
  122. data/spec/examples/remove_device_from_push_spec.rb +164 -0
  123. data/spec/examples/revoke_examples_1_spec.rb +27013 -0
  124. data/spec/examples/revoke_examples_2_spec.rb +27012 -0
  125. data/spec/examples/revoke_examples_3_spec.rb +17967 -0
  126. data/spec/examples/status_request_message_count_exceeded_spec.rb +4 -1
  127. data/spec/examples/subscribe_examples_1_spec.rb +26972 -0
  128. data/spec/examples/subscribe_examples_2_spec.rb +19575 -0
  129. data/spec/lib/connection_callback_spec.rb +4 -3
  130. data/spec/lib/event/formatter_spec.rb +22 -0
  131. data/spec/lib/events/channel_metadata_spec.rb +58 -0
  132. data/spec/lib/events/grant_spec.rb +3 -2
  133. data/spec/lib/events/membership_spec.rb +51 -21
  134. data/spec/lib/events/presence_delta_spec.rb +9 -6
  135. data/spec/lib/events/presence_spec.rb +13 -7
  136. data/spec/lib/events/subscribe_spec.rb +102 -65
  137. data/spec/lib/events/uuid_metadata_spec.rb +86 -0
  138. data/spec/lib/subscribe_event/formatter_spec.rb +22 -0
  139. data/spec/lib/super_admin_spec.rb +8 -4
  140. data/spec/spec_helper.rb +24 -8
  141. metadata +124 -79
  142. data/fixtures/vcr_cassettes/lib/events/create_space.yml +0 -40
  143. data/fixtures/vcr_cassettes/lib/events/create_user.yml +0 -40
  144. data/fixtures/vcr_cassettes/lib/events/delete_user.yml +0 -38
  145. data/fixtures/vcr_cassettes/lib/events/get_members.yml +0 -38
  146. data/fixtures/vcr_cassettes/lib/events/get_space.yml +0 -38
  147. data/fixtures/vcr_cassettes/lib/events/get_space_memberships.yml +0 -38
  148. data/fixtures/vcr_cassettes/lib/events/get_spaces.yml +0 -40
  149. data/fixtures/vcr_cassettes/lib/events/get_user.yml +0 -38
  150. data/fixtures/vcr_cassettes/lib/events/get_users.yml +0 -40
  151. data/fixtures/vcr_cassettes/lib/events/manage_members_remove.yml +0 -83
  152. data/fixtures/vcr_cassettes/lib/events/subscribe-member-add-async.yml +0 -77
  153. data/fixtures/vcr_cassettes/lib/events/subscribe-membership-add-async.yml +0 -77
  154. data/fixtures/vcr_cassettes/lib/events/subscribe-space-update-async.yml +0 -77
  155. data/fixtures/vcr_cassettes/lib/events/update_space.yml +0 -40
  156. data/fixtures/vcr_cassettes/lib/events/update_user.yml +0 -40
  157. data/lib/pubnub/events/get_members.rb +0 -93
  158. data/lib/pubnub/events/get_space.rb +0 -74
  159. data/lib/pubnub/events/get_space_memberships.rb +0 -93
  160. data/lib/pubnub/events/get_spaces.rb +0 -90
  161. data/lib/pubnub/events/get_user.rb +0 -74
  162. data/lib/pubnub/events/get_users.rb +0 -90
  163. data/lib/pubnub/events/manage_memberships.rb +0 -105
  164. data/lib/pubnub/events/update_user.rb +0 -86
  165. data/lib/pubnub/validators/create_space.rb +0 -44
  166. data/lib/pubnub/validators/create_user.rb +0 -44
  167. data/lib/pubnub/validators/delete_space.rb +0 -32
  168. data/lib/pubnub/validators/delete_user.rb +0 -32
  169. data/lib/pubnub/validators/get_members.rb +0 -32
  170. data/lib/pubnub/validators/get_space.rb +0 -32
  171. data/lib/pubnub/validators/get_space_memberships.rb +0 -32
  172. data/lib/pubnub/validators/get_spaces.rb +0 -16
  173. data/lib/pubnub/validators/get_user.rb +0 -32
  174. data/lib/pubnub/validators/get_users.rb +0 -16
  175. data/lib/pubnub/validators/manage_members.rb +0 -45
  176. data/lib/pubnub/validators/manage_memberships.rb +0 -45
  177. data/lib/pubnub/validators/push.rb +0 -43
  178. data/lib/pubnub/validators/update_space.rb +0 -45
  179. data/lib/pubnub/validators/update_user.rb +0 -45
  180. data/spec/examples/revoke_examples_spec.rb +0 -71950
  181. data/spec/examples/subscribe_examples_spec.rb +0 -45184
  182. data/spec/lib/events/space_spec.rb +0 -75
  183. data/spec/lib/events/user_spec.rb +0 -75
@@ -0,0 +1,140 @@
1
+ # Toplevel Pubnub module.
2
+ # frozen_string_literal: true
3
+
4
+ module Pubnub
5
+ # Holds SetMemberships functionality
6
+ class SetMemberships < SingleEvent
7
+ include Concurrent::Async
8
+ include Pubnub::Validator::SetMemberships
9
+
10
+ def initialize(options, app)
11
+ @event = current_operation
12
+ @telemetry_name = :l_obj
13
+ @uuid = options[:uuid].nil? ? app.env[:uuid] : options[:uuid]
14
+ @limit = [options[:limit], 100].min unless options[:limit].nil?
15
+ @sort = options[:sort].join(",") if options[:sort] && !options[:sort].empty?
16
+ @filter = options[:filter] if options[:filter] && !options[:filter].empty?
17
+ @start = options[:start] if options[:start] && !options[:start].empty?
18
+ @end = options[:end] if options[:start] && !options[:end].empty?
19
+
20
+ if options[:include]
21
+ include = options[:include]
22
+ @include_count = [0, '0', false].include?(include[:count]) ? "0" : "1" unless include[:count].nil?
23
+ @include_custom = "custom" if !include[:custom].nil? && ![0, '0', false].include?(include[:custom])
24
+ @include_channel_metadata = "channel" if !include[:channel_metadata].nil? && ![0, '0', false].include?(include[:channel_metadata])
25
+ @include_channel_custom = "channel.custom" if !include[:channel_custom].nil? && ![0, '0', false].include?(include[:channel_custom])
26
+
27
+ @include = [@include_custom, @include_channel_metadata, @include_channel_custom].reject { |flag| flag.to_s.empty? }
28
+ end
29
+
30
+ @channels = options[:channels] if options[:channels] && !options[:channels].empty?
31
+
32
+ # Collections by default return number of available entries.
33
+ @include_count = "1" if @include_count.nil?
34
+
35
+ super
36
+ end
37
+
38
+ def fire
39
+ Pubnub.logger.debug('Pubnub::SetMemberships') { "Fired event #{self.class}" }
40
+
41
+ memberships = @channels.map do |membership|
42
+ membership_object = { channel: { id: membership[:channel] } }
43
+ membership_object[:custom] = membership[:custom] if membership[:custom] && !membership[:custom].empty?
44
+
45
+ membership_object
46
+ end
47
+
48
+ body = Formatter.format_message({ set: memberships }, @cipher_key, false)
49
+ response = send_request(body)
50
+
51
+ envelopes = fire_callbacks(handle(response, uri))
52
+ finalize_event(envelopes)
53
+ envelopes
54
+ end
55
+
56
+ private
57
+
58
+ def current_operation
59
+ Pubnub::Constants::OPERATION_SET_MEMBERSHIPS
60
+ end
61
+
62
+ def parameters(signature = false)
63
+ parameters = super(signature)
64
+ parameters[:limit] = @limit unless @limit.nil?
65
+ parameters[:sort] = @sort unless @sort.nil?
66
+ parameters[:filter] = @filter unless @filter.nil?
67
+ parameters[:start] = @start unless @start.nil?
68
+ parameters[:end] = @end if @end && !@start
69
+ parameters[:count] = @include_count unless @include_count.nil?
70
+ parameters[:include] = @include.sort.join(",") if @include && !@include.empty?
71
+
72
+ parameters
73
+ end
74
+
75
+ def path
76
+ '/' + [
77
+ 'v2',
78
+ 'objects',
79
+ @subscribe_key,
80
+ 'uuids',
81
+ Formatter.encode(@uuid),
82
+ 'channels'
83
+ ].join('/')
84
+ end
85
+
86
+ def valid_envelope(parsed_response, req_res_objects)
87
+ memberships = parsed_response['data'].map { |uuid_membership|
88
+ membership = Hash.new
89
+ uuid_membership.each{ |k,v| membership[k.to_sym] = v }
90
+
91
+ unless membership[:channel].nil?
92
+ channel_metadata = Hash.new
93
+ membership[:channel].each{ |k,v| channel_metadata[k.to_sym] = v }
94
+ channel_metadata[:updated] = Date._parse(channel_metadata[:updated]) unless channel_metadata[:updated].nil?
95
+ membership[:channel] = channel_metadata
96
+ end
97
+ membership[:updated] = Date._parse(membership[:updated]) unless membership[:updated].nil?
98
+
99
+ membership
100
+ }
101
+
102
+ Pubnub::Envelope.new(
103
+ event: @event,
104
+ event_options: @given_options,
105
+ timetoken: nil,
106
+
107
+ result: {
108
+ code: req_res_objects[:response].code,
109
+ operation: current_operation,
110
+ client_request: req_res_objects[:request],
111
+ server_response: req_res_objects[:response],
112
+ data: {
113
+ memberships: memberships,
114
+ totalCount: parsed_response['totalCount'],
115
+ next: parsed_response['next'],
116
+ prev: parsed_response['prev']
117
+ }
118
+ },
119
+
120
+ status: {
121
+ code: req_res_objects[:response].code,
122
+ operation: current_operation,
123
+ client_request: req_res_objects[:request],
124
+ server_response: req_res_objects[:response],
125
+ data: nil,
126
+ category: Pubnub::Constants::STATUS_ACK,
127
+ error: false,
128
+ auto_retried: false,
129
+
130
+ current_timetoken: nil,
131
+ last_timetoken: nil,
132
+ subscribed_channels: nil,
133
+ subscribed_channel_groups: nil,
134
+
135
+ config: get_config
136
+ }
137
+ )
138
+ end
139
+ end
140
+ end
@@ -2,23 +2,33 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  module Pubnub
5
- # Holds CreateUser functionality
6
- class CreateUser < SingleEvent
5
+ # Holds SetUuidMetadata functionality
6
+ class SetUuidMetadata < SingleEvent
7
7
  include Concurrent::Async
8
- include Pubnub::Validator::CreateUser
8
+ include Pubnub::Validator::SetUuidMetadata
9
9
 
10
10
  def initialize(options, app)
11
- @event = :create_user
11
+ @event = current_operation
12
12
  @telemetry_name = :l_obj
13
- @data = options[:data]
14
- @include = options[:include]
13
+ @uuid = options[:uuid].nil? ? app.env[:uuid] : options[:uuid]
14
+
15
+ # Clean up user-provided metadata object from nils.
16
+ @metadata = options[:metadata].delete_if { |_k, v| v.blank? } unless options[:metadata].nil?
17
+
18
+ if options[:include]
19
+ @include = [0, '0', false].include?(options[:include][:custom]) ? "0" : "1" unless options[:include][:custom].nil?
20
+ end
21
+
22
+ # Single entity creation should return it's 'custom' field by default.
23
+ @include = "custom" if @include.nil?
24
+
15
25
  super
16
26
  end
17
27
 
18
28
  def fire
19
- Pubnub.logger.debug('Pubnub::CreateUser') { "Fired event #{self.class}" }
29
+ Pubnub.logger.debug('Pubnub::SetUuidMetadata') { "Fired event #{self.class}" }
20
30
 
21
- body = Formatter.format_message(@data, @cipher_key, false)
31
+ body = Formatter.format_message(@metadata, @cipher_key, false)
22
32
  response = send_request(body)
23
33
 
24
34
  envelopes = fire_callbacks(handle(response, uri))
@@ -29,25 +39,31 @@ module Pubnub
29
39
  private
30
40
 
31
41
  def current_operation
32
- Pubnub::Constants::OPERATION_CREATE_USER
42
+ Pubnub::Constants::OPERATION_SET_UUID_METADATA
33
43
  end
34
44
 
35
- def parameters(*_args)
36
- parameters = super
37
- parameters[:include] = @include if @include
45
+ def parameters(signature = false)
46
+ parameters = super(signature)
47
+ parameters[:include] = @include
38
48
  parameters
39
49
  end
40
50
 
41
51
  def path
42
52
  '/' + [
43
- 'v1',
53
+ 'v2',
44
54
  'objects',
45
55
  @subscribe_key,
46
- 'users'
56
+ 'uuids',
57
+ Formatter.encode(@uuid)
47
58
  ].join('/')
48
59
  end
49
60
 
50
61
  def valid_envelope(parsed_response, req_res_objects)
62
+ data = parsed_response['data']
63
+ metadata = Hash.new
64
+ data.each{ |k,v| metadata[k.to_sym] = v }
65
+ metadata[:updated] = Date._parse(metadata[:updated]) unless metadata[:updated].nil?
66
+
51
67
  Pubnub::Envelope.new(
52
68
  event: @event,
53
69
  event_options: @given_options,
@@ -55,15 +71,15 @@ module Pubnub
55
71
 
56
72
  result: {
57
73
  code: req_res_objects[:response].code,
58
- operation: Pubnub::Constants::OPERATION_CREATE_USER,
74
+ operation: current_operation,
59
75
  client_request: req_res_objects[:request],
60
76
  server_response: req_res_objects[:response],
61
- data: parsed_response
77
+ data: metadata
62
78
  },
63
79
 
64
80
  status: {
65
81
  code: req_res_objects[:response].code,
66
- operation: Pubnub::Constants::OPERATION_CREATE_USER,
82
+ operation: current_operation,
67
83
  client_request: req_res_objects[:request],
68
84
  server_response: req_res_objects[:response],
69
85
  data: nil,
@@ -1,4 +1,5 @@
1
1
  require 'cgi'
2
+ require "addressable/uri"
2
3
 
3
4
  # Toplevel Pubnub module.
4
5
  module Pubnub
@@ -30,13 +31,22 @@ module Pubnub
30
31
  )
31
32
  end
32
33
 
34
+ def format_uuid(uuids, should_encode = true)
35
+ make_uuid_array(uuids).map do |uuid|
36
+ if should_encode
37
+ encode(uuid)
38
+ else
39
+ uuid.to_s
40
+ end
41
+ end
42
+ end
43
+
33
44
  # Transforms message to json and encode it
34
45
  def format_message(message, cipher_key, uri_escape = true)
35
46
  if cipher_key
36
47
  pc = Pubnub::Crypto.new(cipher_key)
37
48
  message = pc.encrypt(message).to_json
38
- # rubocop:disable Lint/UriEscapeUnescape
39
- message = URI.escape(message) if uri_escape
49
+ message = Addressable::URI.escape(message) if uri_escape
40
50
  else
41
51
  message = message.to_json
42
52
  message = Formatter.encode(message) if uri_escape
@@ -70,6 +80,23 @@ module Pubnub
70
80
  end
71
81
  end
72
82
 
83
+ def make_uuid_array(uuid)
84
+ case uuid.class.to_s
85
+ when 'String'
86
+ uuid.to_s.split(',')
87
+ when 'Symbol'
88
+ uuid.to_s.split(',')
89
+ when 'Array'
90
+ uuid.map(&:to_s)
91
+ when 'NilClass'
92
+ []
93
+ else
94
+ raise Pubnub::ArgumentError.new(
95
+ message: 'UUID has to be String, Symbol or Array'
96
+ ), 'UUID has to be String, Symbol or Array'
97
+ end
98
+ end
99
+
73
100
  # Parses string to JSON
74
101
  def parse_json(string)
75
102
  [JSON.parse(string), nil]
@@ -84,7 +111,7 @@ module Pubnub
84
111
  if %w[meta ortt].include?(key.to_s)
85
112
  encoded_value = URI.encode_www_form_component(value.to_json).gsub('+', '%20')
86
113
  params << "#{key}=#{encoded_value}&"
87
- elsif %w[t state filter-expr].include?(key.to_s)
114
+ elsif %w[t state filter filter-expr].include?(key.to_s)
88
115
  params << "#{key}=#{value}&"
89
116
  else
90
117
  params << "#{key}=#{URI.encode_www_form_component(value).gsub('+', '%20')}&"
@@ -14,17 +14,7 @@ module Pubnub
14
14
  end
15
15
 
16
16
  def signature
17
- message = [
18
- @subscribe_key,
19
- @publish_key,
20
- path,
21
- variables_for_signature.gsub(/[!~'()*]/) { |char| '%' + char.ord.to_s(16).upcase }, # Replace ! ~ * ' ( )
22
- ].join("\n")
23
-
24
- Base64.urlsafe_encode64(
25
- OpenSSL::HMAC.digest(OpenSSL::Digest.new('sha256'),
26
- @secret_key.to_s, message)
27
- ).strip
17
+ super_admin_signature("GET", nil)
28
18
  end
29
19
 
30
20
  def parameters(set_signature = false)
@@ -32,6 +22,7 @@ module Pubnub
32
22
  params['channel-group'] = @group.join(',') unless @group.blank?
33
23
  params[:timestamp] = @timestamp
34
24
  params[:channel] = @channel.join(',') unless @channel.first.blank?
25
+ params['target-uuid'] = @uuids.join(',') if !@uuids.nil? && !@uuids.first.blank?
35
26
  params[:signature] = signature unless set_signature
36
27
  params
37
28
  end
@@ -10,9 +10,7 @@ module Pubnub
10
10
  status: options[:status],
11
11
  presence: options[:presence],
12
12
  signal: options[:signal],
13
- user: options[:user],
14
- space: options[:space],
15
- membership: options[:membership]
13
+ object: options[:object]
16
14
  }
17
15
  validate!
18
16
  end
@@ -148,6 +148,11 @@ module Pubnub
148
148
  end
149
149
 
150
150
  def format_envelopes(response, request)
151
+ if response.is_a?(StandardError)
152
+ # unexpected error response
153
+ raise response
154
+ end
155
+
151
156
  parsed_response, error = Pubnub::Formatter.parse_json(response.body)
152
157
 
153
158
  error = response if parsed_response && response.code.to_i != 200
@@ -168,32 +173,36 @@ module Pubnub
168
173
  Pubnub::Constants::OPERATION_SIGNAL
169
174
  elsif message[:type] == 2
170
175
  case message[:payload]['type']
171
- when 'user'
176
+ when 'uuid'
172
177
  case message[:payload]['event']
173
- when 'create'
174
- Pubnub::Constants::OPERATION_CREATE_USER
175
- when 'update'
176
- Pubnub::Constants::OPERATION_UPDATE_USER
178
+ when 'set'
179
+ Pubnub::Constants::OPERATION_SET_UUID_METADATA
177
180
  when 'delete'
178
- Pubnub::Constants::OPERATION_DELETE_USER
181
+ Pubnub::Constants::OPERATION_REMOVE_UUID_METADATA
179
182
  else
180
- Pubnub.logger.error('Pubnub::SubscribeEvent::Formatter') { "Invalid event #{message[:payload]['event']}." }
181
- raise Exception, "Invalid event #{message[:payload]['event']}."
183
+ Pubnub.logger.error('Pubnub::SubscribeEvent::Formatter') { "Invalid event #{message[:payload]['event']} for uuid." }
184
+ raise Exception, "Invalid event #{message[:payload]['event']} for uuid."
182
185
  end
183
- when 'space'
186
+ when 'channel'
184
187
  case message[:payload]['event']
185
- when 'create'
186
- Pubnub::Constants::OPERATION_CREATE_SPACE
187
- when 'update'
188
- Pubnub::Constants::OPERATION_UPDATE_SPACE
188
+ when 'set'
189
+ Pubnub::Constants::OPERATION_SET_CHANNEL_METADATA
189
190
  when 'delete'
190
- Pubnub::Constants::OPERATION_DELETE_SPACE
191
+ Pubnub::Constants::OPERATION_REMOVE_CHANNEL_METADATA
191
192
  else
192
- Pubnub.logger.error('Pubnub::SubscribeEvent::Formatter') { "Invalid event #{message[:payload]['event']}." }
193
- raise Exception, "Invalid event #{message[:payload]['event']}."
193
+ Pubnub.logger.error('Pubnub::SubscribeEvent::Formatter') { "Invalid event #{message[:payload]['event']} for channel." }
194
+ raise Exception, "Invalid event #{message[:payload]['event']} for channel."
194
195
  end
195
196
  when 'membership'
196
- Pubnub::Constants::OPERATION_MANAGE_MEMBERSHIPS
197
+ case message[:payload]['event']
198
+ when 'set'
199
+ Pubnub::Constants::OPERATION_SET_MEMBERSHIPS
200
+ when 'delete'
201
+ Pubnub::Constants::OPERATION_REMOVE_MEMBERSHIPS
202
+ else
203
+ Pubnub.logger.error('Pubnub::SubscribeEvent::Formatter') { "Invalid event #{message[:payload]['event']} for membership." }
204
+ raise Exception, "Invalid event #{message[:payload]['event']} for membership."
205
+ end
197
206
  else
198
207
  Pubnub.logger.error('Pubnub::SubscribeEvent::Formatter') { "Invalid operation type #{message[:payload]['type']}." }
199
208
  raise Exception, "Invalid operation type #{message[:payload]['type']}."
@@ -75,12 +75,11 @@ module Pubnub
75
75
  secure_call callbacks.callbacks[:signal], envelope
76
76
  when Pubnub::Constants::OPERATION_PRESENCE
77
77
  secure_call callbacks.callbacks[:presence], envelope
78
- when Pubnub::Constants::OPERATION_CREATE_USER, Pubnub::Constants::OPERATION_UPDATE_USER, Pubnub::Constants::OPERATION_DELETE_USER
79
- secure_call callbacks.callbacks[:user], envelope
80
- when Pubnub::Constants::OPERATION_CREATE_SPACE, Pubnub::Constants::OPERATION_UPDATE_SPACE, Pubnub::Constants::OPERATION_DELETE_SPACE
81
- secure_call callbacks.callbacks[:space], envelope
82
- when Pubnub::Constants::OPERATION_MANAGE_MEMBERS, Pubnub::Constants::OPERATION_MANAGE_MEMBERSHIPS
83
- secure_call callbacks.callbacks[:membership], envelope
78
+ when Pubnub::Constants::OPERATION_SET_UUID_METADATA, Pubnub::Constants::OPERATION_REMOVE_UUID_METADATA,
79
+ Pubnub::Constants::OPERATION_SET_CHANNEL_METADATA, Pubnub::Constants::OPERATION_REMOVE_CHANNEL_METADATA,
80
+ Pubnub::Constants::OPERATION_SET_CHANNEL_MEMBERS, Pubnub::Constants::OPERATION_REMOVE_CHANNEL_MEMBERS,
81
+ Pubnub::Constants::OPERATION_SET_MEMBERSHIPS, Pubnub::Constants::OPERATION_REMOVE_MEMBERSHIPS
82
+ secure_call callbacks.callbacks[:object], envelope
84
83
  else
85
84
  secure_call callbacks.callbacks[:status], envelope
86
85
  end
@@ -0,0 +1,52 @@
1
+ # Toplevel Pubnub module.
2
+ module Pubnub
3
+ # Validator module that holds all validators modules
4
+ module Validator
5
+ # Validator for AddChannelsToPush event
6
+ module AddChannelsToPush
7
+ include CommonValidator
8
+
9
+ def validate!
10
+ return if @skip_validate
11
+ validate_push_token!
12
+ validate_push_gateway!
13
+ validate_channel!
14
+ validate_topic! if @push_gateway.eql? 'apns2'
15
+ end
16
+
17
+ private
18
+
19
+ def validate_push_token!
20
+ return unless @push_token.nil? || @push_token.empty?
21
+ raise(
22
+ ArgumentError.new,
23
+ ':push_token is required for AddChannelsToPush event.'
24
+ )
25
+ end
26
+
27
+ def validate_push_gateway!
28
+ return unless @push_gateway.nil? || @push_gateway.empty?
29
+ raise(
30
+ ArgumentError.new,
31
+ ':push_gateway is required for AddChannelsToPush event.'
32
+ )
33
+ end
34
+
35
+ def validate_channel!
36
+ return unless @channel.nil? || @channel.empty?
37
+ raise(
38
+ ArgumentError.new,
39
+ ':channel is required for AddChannelsToPush event.'
40
+ )
41
+ end
42
+
43
+ def validate_topic!
44
+ return unless @topic.nil? || @topic.empty?
45
+ raise(
46
+ ArgumentError.new,
47
+ ':topic is required for AddChannelsToPush event.'
48
+ )
49
+ end
50
+ end
51
+ end
52
+ end