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,75 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://ps.pndsn.com/v2/subscribe/sub-a-mock-key/uuid_mg3/0?auth=ruby-test-auth&pnsdk=PubNub-Ruby/4.2.7&t=%7B%22r%22:0,%22t%22:0%7D&uuid=ruby-test-uuid
6
+ body:
7
+ encoding: UTF-8
8
+ string: ''
9
+ headers:
10
+ User-Agent:
11
+ - HTTPClient/1.0 (2.8.3, ruby 2.6.3 (2019-04-16))
12
+ Accept:
13
+ - "*/*"
14
+ Date:
15
+ - Wed, 14 Oct 2020 20:10:53 GMT
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ Date:
22
+ - Wed, 14 Oct 2020 20:10:53 GMT
23
+ Content-Type:
24
+ - text/javascript; charset="UTF-8"
25
+ Content-Length:
26
+ - '45'
27
+ Connection:
28
+ - keep-alive
29
+ Cache-Control:
30
+ - no-cache
31
+ Access-Control-Allow-Origin:
32
+ - "*"
33
+ Access-Control-Allow-Methods:
34
+ - GET
35
+ body:
36
+ encoding: UTF-8
37
+ string: '{"t":{"t":"16027062536439869","r":12},"m":[]}'
38
+ recorded_at: Wed, 14 Oct 2020 20:10:53 GMT
39
+ - request:
40
+ method: get
41
+ uri: http://ps.pndsn.com/v2/subscribe/sub-a-mock-key/uuid_mg3/0?auth=ruby-test-auth&pnsdk=PubNub-Ruby/4.2.7&t=%7B%22r%22:12,%22t%22:%2216027062536439869%22%7D&uuid=ruby-test-uuid
42
+ body:
43
+ encoding: UTF-8
44
+ string: ''
45
+ headers:
46
+ User-Agent:
47
+ - HTTPClient/1.0 (2.8.3, ruby 2.6.3 (2019-04-16))
48
+ Accept:
49
+ - "*/*"
50
+ Date:
51
+ - Wed, 14 Oct 2020 20:10:53 GMT
52
+ response:
53
+ status:
54
+ code: 200
55
+ message: OK
56
+ headers:
57
+ Date:
58
+ - Wed, 14 Oct 2020 20:10:55 GMT
59
+ Content-Type:
60
+ - text/javascript; charset="UTF-8"
61
+ Content-Length:
62
+ - '366'
63
+ Connection:
64
+ - keep-alive
65
+ Cache-Control:
66
+ - no-cache
67
+ Access-Control-Allow-Origin:
68
+ - "*"
69
+ Access-Control-Allow-Methods:
70
+ - GET
71
+ body:
72
+ encoding: UTF-8
73
+ string: '{"t":{"t":"16027062557993707","r":12},"m":[{"a":"5","f":0,"e":2,"p":{"t":"16027062557985952","r":12},"k":"sub-a-mock-key","c":"uuid_mg3","d":{"source":"objects","version":"2.0","event":"set","type":"uuid","data":{"custom":{"XXX":"YYYY"},"eTag":"Ad2eyIWXwJzBqAE","id":"uuid_mg3","name":"magnum","updated":"2020-10-14T20:10:55.763006Z"}}}]}'
74
+ recorded_at: Wed, 14 Oct 2020 20:10:55 GMT
75
+ recorded_with: VCR 6.0.0
@@ -48,22 +48,25 @@ require 'pubnub/validators/time'
48
48
  require 'pubnub/validators/where_now'
49
49
  require 'pubnub/validators/delete'
50
50
  require 'pubnub/validators/message_counts'
51
- require 'pubnub/validators/push'
51
+ require 'pubnub/validators/add_channels_to_push'
52
+ require 'pubnub/validators/list_push_provisions'
53
+ require 'pubnub/validators/remove_channels_from_push'
54
+ require 'pubnub/validators/remove_device_from_push'
52
55
  require 'pubnub/validators/signal'
53
- require 'pubnub/validators/create_user'
54
- require 'pubnub/validators/create_space'
55
- require 'pubnub/validators/delete_user'
56
- require 'pubnub/validators/delete_space'
57
- require 'pubnub/validators/get_user'
58
- require 'pubnub/validators/get_users'
59
- require 'pubnub/validators/get_space'
60
- require 'pubnub/validators/get_spaces'
61
- require 'pubnub/validators/update_user'
62
- require 'pubnub/validators/update_space'
63
- require 'pubnub/validators/get_members'
64
- require 'pubnub/validators/get_space_memberships'
65
- require 'pubnub/validators/manage_members'
66
- require 'pubnub/validators/manage_memberships'
56
+ require 'pubnub/validators/set_uuid_metadata'
57
+ require 'pubnub/validators/set_channel_metadata'
58
+ require 'pubnub/validators/remove_uuid_metadata'
59
+ require 'pubnub/validators/remove_channel_metadata'
60
+ require 'pubnub/validators/get_uuid_metadata'
61
+ require 'pubnub/validators/get_all_uuid_metadata'
62
+ require 'pubnub/validators/get_channel_metadata'
63
+ require 'pubnub/validators/get_all_channels_metadata'
64
+ require 'pubnub/validators/get_channel_members'
65
+ require 'pubnub/validators/get_memberships'
66
+ require 'pubnub/validators/set_channel_members'
67
+ require 'pubnub/validators/set_memberships'
68
+ require 'pubnub/validators/remove_channel_members'
69
+ require 'pubnub/validators/remove_memberships'
67
70
 
68
71
  Dir[File.join(File.dirname(__dir__), 'pubnub', 'events', '*.rb')].each do |file|
69
72
  require file
@@ -7,8 +7,10 @@ module Pubnub
7
7
  EVENTS = %w[publish subscribe presence leave history here_now audit grant delete_messages
8
8
  revoke time heartbeat where_now set_state state channel_registration message_counts signal
9
9
  add_channels_to_push list_push_provisions remove_channels_from_push remove_device_from_push
10
- create_user create_space delete_user delete_space get_user get_users get_space get_spaces
11
- update_user update_space get_members get_space_memberships manage_members manage_memberships].freeze
10
+ set_uuid_metadata set_channel_metadata remove_uuid_metadata remove_channel_metadata
11
+ get_uuid_metadata get_all_uuid_metadata get_channel_metadata get_all_channels_metadata
12
+ get_channel_members get_memberships set_channel_members set_memberships
13
+ remove_memberships remove_channel_members].freeze
12
14
 
13
15
  EVENTS.each do |event_name|
14
16
  define_method event_name do |options = {}, &block|
@@ -12,7 +12,7 @@ module Pubnub
12
12
  sync = options[:http_sync]
13
13
  start_tt = options.fetch(:start)
14
14
  end_tt = options.fetch(:end)
15
- if sync
15
+ if sync
16
16
  sync_paged_history(channel, page, limit, callback, start: start_tt, end: end_tt)
17
17
  else
18
18
  async_paged_history(options)
@@ -66,20 +66,20 @@ module Pubnub
66
66
  OPERATION_REMOVE_CHANNELS_FROM_PUSH = :remove_channels_from_push
67
67
  OPERATION_REMOVE_DEVICE_FROM_PUSH = :remove_device_from_push
68
68
  OPERATION_SIGNAL = :signal
69
- OPERATION_CREATE_USER = :create_user
70
- OPERATION_GET_USER = :get_user
71
- OPERATION_GET_USERS = :get_users
72
- OPERATION_UPDATE_USER = :update_user
73
- OPERATION_DELETE_USER = :delete_user
74
- OPERATION_CREATE_SPACE = :create_space
75
- OPERATION_GET_SPACE = :get_space
76
- OPERATION_GET_SPACES = :get_spaces
77
- OPERATION_UPDATE_SPACE = :update_space
78
- OPERATION_DELETE_SPACE = :delete_space
79
- OPERATION_GET_MEMBERS = :get_members
80
- OPERATION_MANAGE_MEMBERS = :manage_members
81
- OPERATION_GET_SPACE_MEMBERSHIPS = :get_space_memberships
82
- OPERATION_MANAGE_MEMBERSHIPS = :manage_memberships
69
+ OPERATION_SET_UUID_METADATA = :set_uuid_metadata
70
+ OPERATION_GET_UUID_METADATA = :get_uuid_metadata
71
+ OPERATION_GET_ALL_UUID_METADATA = :get_all_uuid_metadata
72
+ OPERATION_REMOVE_UUID_METADATA = :remove_uuid_metadata
73
+ OPERATION_SET_CHANNEL_METADATA = :set_channel_metadata
74
+ OPERATION_GET_CHANNEL_METADATA = :get_channel_metadata
75
+ OPERATION_GET_ALL_CHANNELS_METADATA = :get_all_channels_metadata
76
+ OPERATION_REMOVE_CHANNEL_METADATA = :remove_channel_metadata
77
+ OPERATION_GET_CHANNEL_MEMBERS = :get_channel_members
78
+ OPERATION_SET_CHANNEL_MEMBERS = :set_channel_members
79
+ OPERATION_REMOVE_CHANNEL_MEMBERS = :remove_channel_members
80
+ OPERATION_GET_MEMBERSHIPS = :get_memberships
81
+ OPERATION_SET_MEMBERSHIPS = :set_memberships
82
+ OPERATION_REMOVE_MEMBERSHIPS = :remove_memberships
83
83
 
84
84
  OPERATIONS = [
85
85
  OPERATION_SUBSCRIBE, OPERATION_HEARTBEAT, OPERATION_PRESENCE, OPERATION_TIME, OPERATION_HISTORY,
@@ -87,10 +87,11 @@ module Pubnub
87
87
  OPERATION_LIST_ALL_CHANNELS_IN_CHANNEL_GROUP, OPERATION_CHANNEL_GROUP_ADD, OPERATION_CHANNEL_GROUP_REMOVE,
88
88
  OPERATION_AUDIT, OPERATION_GRANT, OPERATION_REVOKE, OPERATION_WHERE_NOW, OPERATION_MESSAGE_COUNTS,
89
89
  OPERATION_ADD_CHANNELS_TO_PUSH, OPERATION_LIST_PUSH_PROVISIONS, OPERATION_REMOVE_CHANNELS_FROM_PUSH,
90
- OPERATION_REMOVE_DEVICE_FROM_PUSH, OPERATION_SIGNAL, OPERATION_CREATE_USER, OPERATION_GET_USER,
91
- OPERATION_GET_USERS, OPERATION_UPDATE_USER, OPERATION_DELETE_USER, OPERATION_CREATE_SPACE,
92
- OPERATION_GET_SPACE, OPERATION_GET_SPACES, OPERATION_UPDATE_SPACE, OPERATION_DELETE_SPACE,
93
- OPERATION_GET_MEMBERS, OPERATION_MANAGE_MEMBERS, OPERATION_GET_SPACE_MEMBERSHIPS, OPERATION_MANAGE_MEMBERSHIPS
90
+ OPERATION_REMOVE_DEVICE_FROM_PUSH, OPERATION_SIGNAL, OPERATION_SET_UUID_METADATA, OPERATION_GET_UUID_METADATA,
91
+ OPERATION_GET_ALL_UUID_METADATA, OPERATION_REMOVE_UUID_METADATA, OPERATION_SET_CHANNEL_METADATA,
92
+ OPERATION_GET_CHANNEL_METADATA, OPERATION_GET_ALL_CHANNELS_METADATA, OPERATION_REMOVE_CHANNEL_METADATA,
93
+ OPERATION_GET_CHANNEL_MEMBERS, OPERATION_SET_CHANNEL_MEMBERS, OPERATION_REMOVE_CHANNEL_MEMBERS,
94
+ OPERATION_GET_MEMBERSHIPS, OPERATION_SET_MEMBERSHIPS, OPERATION_REMOVE_MEMBERSHIPS
94
95
  ].freeze
95
96
 
96
97
  # Announcements
@@ -29,6 +29,7 @@ module Pubnub
29
29
  set_timestamp
30
30
  validate!
31
31
  telemetry = @app.telemetry_for(@telemetry_name)
32
+ @compressed_body = nil
32
33
  @current_telemetry = telemetry ? telemetry.round(3) : nil
33
34
  Pubnub.logger.debug('Pubnub::Event') { "Initialized #{self.class}" }
34
35
  end
@@ -46,24 +47,20 @@ module Pubnub
46
47
  def send_request(compressed_body = '')
47
48
  Pubnub.logger.debug('Pubnub::Event') { '#send_request called' }
48
49
 
50
+ @compressed_body = compressed_body
49
51
  sender = request_dispatcher
50
52
  Pubnub.logger.debug('Pubnub::Event') { '#send_request got sender' }
51
53
 
52
54
  telemetry_time_start = ::Time.now.to_f
53
- response = case @event
54
- when Pubnub::Constants::OPERATION_DELETE, Pubnub::Constants::OPERATION_DELETE_SPACE, Pubnub::Constants::OPERATION_DELETE_USER
55
- sender.delete(uri.to_s)
56
- when Pubnub::Constants::OPERATION_MANAGE_MEMBERS, Pubnub::Constants::OPERATION_MANAGE_MEMBERSHIPS,
57
- Pubnub::Constants::OPERATION_UPDATE_SPACE, Pubnub::Constants::OPERATION_UPDATE_USER
58
- sender.patch(uri.to_s, body: compressed_body)
59
- when Pubnub::Constants::OPERATION_CREATE_USER, Pubnub::Constants::OPERATION_CREATE_SPACE
55
+ response = case operation_http_method
56
+ when "get"
57
+ sender.get(uri.to_s)
58
+ when "post"
60
59
  sender.post(uri.to_s, body: compressed_body)
60
+ when "patch"
61
+ sender.patch(uri.to_s, body: compressed_body)
61
62
  else
62
- if compressed_body.empty?
63
- sender.get(uri.to_s)
64
- else
65
- sender.post(uri.to_s, body: compressed_body)
66
- end
63
+ sender.delete(uri.to_s)
67
64
  end
68
65
 
69
66
  begin
@@ -84,7 +81,7 @@ module Pubnub
84
81
  return @uri if @uri
85
82
  end
86
83
 
87
- sa_signature = super_admin_signature unless parameters.include?(:signature)
84
+ sa_signature = super_admin_signature(operation_http_method, @compressed_body) unless parameters.include?(:signature)
88
85
 
89
86
  uri = @ssl ? 'https://' : 'http://'
90
87
  uri += @origin
@@ -105,6 +102,23 @@ module Pubnub
105
102
 
106
103
  private
107
104
 
105
+ def operation_http_method
106
+ case @event
107
+ when Pubnub::Constants::OPERATION_DELETE, Pubnub::Constants::OPERATION_REMOVE_CHANNEL_METADATA, Pubnub::Constants::OPERATION_REMOVE_UUID_METADATA
108
+ "delete"
109
+ when Pubnub::Constants::OPERATION_SET_UUID_METADATA, Pubnub::Constants::OPERATION_SET_CHANNEL_METADATA,
110
+ Pubnub::Constants::OPERATION_SET_CHANNEL_MEMBERS, Pubnub::Constants::OPERATION_SET_MEMBERSHIPS,
111
+ Pubnub::Constants::OPERATION_REMOVE_CHANNEL_MEMBERS, Pubnub::Constants::OPERATION_REMOVE_MEMBERSHIPS
112
+ "patch"
113
+ else
114
+ if @compressed_body.nil? || @compressed_body.empty?
115
+ "get"
116
+ else
117
+ "post"
118
+ end
119
+ end
120
+ end
121
+
108
122
  def secure_call(cb, arg)
109
123
  cb.call arg
110
124
  rescue StandardError => error
@@ -146,10 +160,12 @@ module Pubnub
146
160
  ssl cipher_key secret_key auth_key
147
161
  publish_key subscribe_key timetoken
148
162
  open_timeout read_timeout idle_timeout heartbeat
149
- group action read write manage ttl presence start
150
- end count reverse presence_callback store skip_validate
163
+ group action read write delete manage ttl presence start
164
+ end count limit reverse presence_callback store skip_validate
151
165
  state channel_group channel_groups compressed meta customs include_token
152
- replicate with_presence cipher_key_selector]
166
+ replicate with_presence cipher_key_selector include_meta join update get
167
+ add remove push_token push_gateway environment topic
168
+ ]
153
169
 
154
170
  options = options.each_with_object({}) { |option, obj| obj[option.first.to_sym] = option.last }
155
171
 
@@ -10,7 +10,11 @@ module Pubnub
10
10
  response,
11
11
  request: request,
12
12
  response: response)
13
+ elsif response.is_a?(StandardError)
14
+ # unexpected error response
15
+ raise response
13
16
  end
17
+
14
18
  parsed_response, error = Formatter.parse_json(response.body)
15
19
 
16
20
  error = response if parsed_response && response.code.to_i != 200
@@ -6,20 +6,35 @@ module Pubnub
6
6
  module Signature
7
7
  private
8
8
 
9
- def super_admin_signature
9
+ def super_admin_signature(http_method, body)
10
10
  return unless @app.env[:secret_key]
11
11
 
12
+ # Handle special case with publish operation signing when message sent as POST body.
13
+ http_method = if http_method.upcase == "POST" && current_operation == Pubnub::Constants::OPERATION_PUBLISH
14
+ "GET"
15
+ else
16
+ http_method.upcase
17
+ end
18
+
12
19
  message = [
13
- @app.env[:subscribe_key],
20
+ http_method.upcase,
14
21
  @app.env[:publish_key],
15
22
  path,
16
23
  variables_for_signature.gsub(/[!~'()*]/) { |char| '%' + char.ord.to_s(16).upcase }, # Replace ! ~ * ' ( )
17
- ].join("\n")
24
+ ]
25
+
26
+ if %w[POST PATCH].include?(http_method)
27
+ message.push(body)
28
+ else
29
+ message.push('')
30
+ end
18
31
 
19
- URI.encode_www_form_component(Base64.encode64(
32
+ signature = URI.encode_www_form_component(Base64.encode64(
20
33
  OpenSSL::HMAC.digest(OpenSSL::Digest.new('sha256'),
21
- @app.env[:secret_key].to_s, message)
22
- ).strip).gsub('+', '%20')
34
+ @app.env[:secret_key].to_s, message.join("\n"))
35
+ ).strip.gsub(/\+/, '-').gsub(/\//, '_').gsub(/=+$/, ''))
36
+
37
+ "v2.#{signature}"
23
38
  end
24
39
 
25
40
  def variables_for_signature
@@ -29,7 +44,7 @@ module Pubnub
29
44
  if %w[meta ortt].include?(k.to_s)
30
45
  encoded_value = URI.encode_www_form_component(v.to_json).gsub('+', '%20')
31
46
  "#{k}=#{encoded_value}"
32
- elsif %w[t state filter-expr].include?(k.to_s)
47
+ elsif %w[t state filter-expr sort filter].include?(k.to_s)
33
48
  "#{k}=#{v}"
34
49
  else
35
50
  "#{k}=#{URI.encode_www_form_component(v.to_s).gsub('+', '%20')}"
@@ -3,13 +3,14 @@ module Pubnub
3
3
  # Push related event
4
4
  class AddChannelsToPush < SingleEvent
5
5
  include Concurrent::Async
6
- include Pubnub::Validator::Push
6
+ include Pubnub::Validator::AddChannelsToPush
7
7
 
8
8
  def initialize(options, app)
9
- super
10
9
  @event = current_operation
11
- @auth_key = options[:auth_key]
12
- @params = @given_options
10
+ @telemetry_name = :l_push
11
+ super
12
+ # `environment` should
13
+ @environment ||= 'development' if @push_gateway.eql? 'apns2'
13
14
  end
14
15
 
15
16
  private
@@ -25,19 +26,33 @@ module Pubnub
25
26
  end
26
27
 
27
28
  def path
28
- '/' + [
29
- 'v1',
30
- 'push',
31
- 'sub-key',
32
- @subscribe_key,
33
- 'devices',
34
- @params.fetch(:push_token)
35
- ].join('/')
29
+ if @push_gateway.eql? 'apns2'
30
+ '/' + [
31
+ 'v2',
32
+ 'push',
33
+ 'sub-key',
34
+ @subscribe_key,
35
+ 'devices-apns2',
36
+ @push_token
37
+ ].join('/')
38
+ else
39
+ '/' + [
40
+ 'v1',
41
+ 'push',
42
+ 'sub-key',
43
+ @subscribe_key,
44
+ 'devices',
45
+ @push_token
46
+ ].join('/')
47
+ end
36
48
  end
37
49
 
38
50
  def parameters(*_args)
39
51
  params = super
40
- params.merge!(@params.select { |p, _| required_params.include?(p) })
52
+ params[:add] = Formatter.channels_for_url(@channel, false)
53
+ params[:type] = @push_gateway unless @push_gateway.eql? 'apns2'
54
+ params[:environment] = @environment if @push_gateway.eql? 'apns2'
55
+ params[:topic] = @topic if @push_gateway.eql? 'apns2'
41
56
  params
42
57
  end
43
58
 
@@ -48,6 +63,7 @@ module Pubnub
48
63
  timetoken: nil,
49
64
  status: {
50
65
  code: req_res_objects[:response].code,
66
+ operation: current_operation,
51
67
  client_request: req_res_objects[:request],
52
68
  server_response: req_res_objects[:response],
53
69
 
@@ -0,0 +1,104 @@
1
+ # Toplevel Pubnub module.
2
+ # frozen_string_literal: true
3
+
4
+ module Pubnub
5
+ # Holds GetAllChannelsMetadata functionality
6
+ class GetAllChannelsMetadata < SingleEvent
7
+ include Concurrent::Async
8
+ include Pubnub::Validator::GetAllChannelsMetadata
9
+
10
+ def initialize(options, app)
11
+ @event = current_operation
12
+ @telemetry_name = :l_obj
13
+ @limit = [options[:limit], 100].min unless options[:limit].nil?
14
+ @sort = options[:sort].join(",") if options[:sort] && !options[:sort].empty?
15
+ @filter = options[:filter] if options[:filter] && !options[:filter].empty?
16
+ @start = options[:start] if options[:start] && !options[:start].empty?
17
+ @end = options[:end] if options[:start] && !options[:end].empty?
18
+
19
+ if options[:include]
20
+ @include_count = [0, '0', false].include?(options[:include][:count]) ? "0" : "1" unless options[:include][:count].nil?
21
+ @include = "custom" unless [0, '0', false].include?(options[:include][:custom])
22
+ end
23
+
24
+ # Collections by default return number of available entries.
25
+ @include_count = "1" if @include_count.nil?
26
+
27
+ super
28
+ end
29
+
30
+ private
31
+
32
+ def current_operation
33
+ Pubnub::Constants::OPERATION_GET_ALL_CHANNELS_METADATA
34
+ end
35
+
36
+ def parameters(signature = false)
37
+ parameters = super(signature)
38
+ parameters[:limit] = @limit unless @limit.nil?
39
+ parameters[:sort] = @sort unless @sort.nil?
40
+ parameters[:filter] = @filter unless @filter.nil?
41
+ parameters[:start] = @start unless @start.nil?
42
+ parameters[:end] = @end if @end && !@start
43
+ parameters[:count] = @include_count unless @include_count.nil?
44
+ parameters[:include] = @include unless @include.to_s.empty?
45
+
46
+ parameters
47
+ end
48
+
49
+ def path
50
+ '/' + [
51
+ 'v2',
52
+ 'objects',
53
+ @subscribe_key,
54
+ 'channels'
55
+ ].join('/')
56
+ end
57
+
58
+ def valid_envelope(parsed_response, req_res_objects)
59
+ channels_metadata = parsed_response['data'].map { |uuid_metadata|
60
+ metadata = Hash.new
61
+ uuid_metadata.each{ |k,v| metadata[k.to_sym] = v }
62
+ metadata[:updated] = Date._parse(metadata[:updated]) unless metadata[:updated].nil?
63
+ metadata
64
+ }
65
+
66
+ Pubnub::Envelope.new(
67
+ event: @event,
68
+ event_options: @given_options,
69
+ timetoken: nil,
70
+
71
+ result: {
72
+ code: req_res_objects[:response].code,
73
+ operation: current_operation,
74
+ client_request: req_res_objects[:request],
75
+ server_response: req_res_objects[:response],
76
+ data: {
77
+ metadata: channels_metadata,
78
+ totalCount: parsed_response['totalCount'],
79
+ next: parsed_response['next'],
80
+ prev: parsed_response['prev']
81
+ }
82
+ },
83
+
84
+ status: {
85
+ code: req_res_objects[:response].code,
86
+ operation: current_operation,
87
+ client_request: req_res_objects[:request],
88
+ server_response: req_res_objects[:response],
89
+ data: nil,
90
+ category: Pubnub::Constants::STATUS_ACK,
91
+ error: false,
92
+ auto_retried: false,
93
+
94
+ current_timetoken: nil,
95
+ last_timetoken: nil,
96
+ subscribed_channels: nil,
97
+ subscribed_channel_groups: nil,
98
+
99
+ config: get_config
100
+ }
101
+ )
102
+ end
103
+ end
104
+ end