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.
- checksums.yaml +4 -4
- data/.github/CODEOWNERS +1 -0
- data/.pubnub.yml +168 -117
- data/.travis.yml +13 -9
- data/CHANGELOG.md +31 -8
- data/Gemfile.lock +67 -64
- data/README.md +56 -17
- data/VERSION +1 -1
- data/fixtures/vcr_cassettes/examples/add_channels_to_push/001.yml +45 -0
- data/fixtures/vcr_cassettes/examples/add_channels_to_push/002.yml +45 -0
- data/fixtures/vcr_cassettes/examples/add_channels_to_push/003.yml +45 -0
- data/fixtures/vcr_cassettes/examples/add_channels_to_push/004.yml +45 -0
- data/fixtures/vcr_cassettes/examples/grant/1913.yml +1 -1
- data/fixtures/vcr_cassettes/examples/grant/1944.yml +8 -9
- data/fixtures/vcr_cassettes/examples/grant/1945.yml +359 -9
- data/fixtures/vcr_cassettes/examples/grant/1946.yml +8 -9
- data/fixtures/vcr_cassettes/examples/grant/1947.yml +8 -9
- data/fixtures/vcr_cassettes/examples/grant/1948.yml +8 -9
- data/fixtures/vcr_cassettes/examples/history/100.yml +46 -0
- data/fixtures/vcr_cassettes/examples/history/include_meta__encrypted.yml +46 -0
- data/fixtures/vcr_cassettes/examples/history/include_token__encrypted.yml +45 -0
- data/fixtures/vcr_cassettes/examples/history/no_includes__encrypted.yml +45 -0
- data/fixtures/vcr_cassettes/examples/list_push_provisions/001.yml +46 -0
- data/fixtures/vcr_cassettes/examples/list_push_provisions/002.yml +45 -0
- data/fixtures/vcr_cassettes/examples/list_push_provisions/003.yml +45 -0
- data/fixtures/vcr_cassettes/examples/remove_channels_from_push/001.yml +45 -0
- data/fixtures/vcr_cassettes/examples/remove_channels_from_push/002.yml +45 -0
- data/fixtures/vcr_cassettes/examples/remove_channels_from_push/003.yml +45 -0
- data/fixtures/vcr_cassettes/examples/remove_device_from_push/001.yml +45 -0
- data/fixtures/vcr_cassettes/examples/remove_device_from_push/002.yml +45 -0
- data/fixtures/vcr_cassettes/examples/remove_device_from_push/003.yml +45 -0
- data/fixtures/vcr_cassettes/lib/events/get_all_channels_metadata.yml +39 -0
- data/fixtures/vcr_cassettes/lib/events/get_all_uuid_metadata.yml +76 -0
- data/fixtures/vcr_cassettes/lib/events/get_channel_members.yml +37 -0
- data/fixtures/vcr_cassettes/lib/events/get_channel_metadata.yml +37 -0
- data/fixtures/vcr_cassettes/lib/events/get_memberships1.yml +37 -0
- data/fixtures/vcr_cassettes/lib/events/get_memberships2.yml +37 -0
- data/fixtures/vcr_cassettes/lib/events/get_uuid_metadata1.yml +76 -0
- data/fixtures/vcr_cassettes/lib/events/get_uuid_metadata2.yml +76 -0
- data/fixtures/vcr_cassettes/lib/events/grant-error.yml +2 -2
- data/fixtures/vcr_cassettes/lib/events/grant.yml +10 -11
- data/fixtures/vcr_cassettes/lib/events/remove_channel_members.yml +78 -0
- data/fixtures/vcr_cassettes/lib/events/{delete_space.yml → remove_channel_metadata.yml} +5 -6
- data/fixtures/vcr_cassettes/lib/events/{manage_memberships_remove.yml → remove_memberships1.yml} +8 -9
- data/fixtures/vcr_cassettes/lib/events/{manage_members_add.yml → remove_memberships2.yml} +8 -9
- data/fixtures/vcr_cassettes/lib/events/remove_uuid_metadata1.yml +76 -0
- data/fixtures/vcr_cassettes/lib/events/remove_uuid_metadata2.yml +76 -0
- data/fixtures/vcr_cassettes/lib/events/set_channel_members.yml +39 -0
- data/fixtures/vcr_cassettes/lib/events/set_channel_metadata.yml +39 -0
- data/fixtures/vcr_cassettes/lib/events/{manage_memberships_add.yml → set_memberships1.yml} +8 -9
- data/fixtures/vcr_cassettes/lib/events/set_memberships2.yml +39 -0
- data/fixtures/vcr_cassettes/lib/events/set_uuid_metadata1.yml +78 -0
- data/fixtures/vcr_cassettes/lib/events/set_uuid_metadata2.yml +78 -0
- data/fixtures/vcr_cassettes/lib/events/{subscribe-space-delete-async.yml → subscribe-channel-metadata-remove-sync.yml} +12 -14
- data/fixtures/vcr_cassettes/lib/events/subscribe-channel-metadata-set-async.yml +75 -0
- data/fixtures/vcr_cassettes/lib/events/{subscribe-member-remove-async.yml → subscribe-member-remove-sync.yml} +12 -14
- data/fixtures/vcr_cassettes/lib/events/subscribe-member-set-async.yml +75 -0
- data/fixtures/vcr_cassettes/lib/events/subscribe-membership-remove-async.yml +12 -14
- data/fixtures/vcr_cassettes/lib/events/{subscribe-user-update-async.yml → subscribe-membership-set-async.yml} +12 -14
- data/fixtures/vcr_cassettes/lib/events/{subscribe-user-delete-async.yml → subscribe-uuid-metadata-remove-sync.yml} +12 -14
- data/fixtures/vcr_cassettes/lib/events/subscribe-uuid-metadata-set-async.yml +75 -0
- data/lib/pubnub/client.rb +18 -15
- data/lib/pubnub/client/events.rb +4 -2
- data/lib/pubnub/client/paged_history.rb +1 -1
- data/lib/pubnub/constants.rb +19 -18
- data/lib/pubnub/event.rb +32 -16
- data/lib/pubnub/event/formatter.rb +4 -0
- data/lib/pubnub/event/signature.rb +22 -7
- data/lib/pubnub/events/add_channels_to_push.rb +29 -13
- data/lib/pubnub/events/get_all_channels_metadata.rb +104 -0
- data/lib/pubnub/events/get_all_uuid_metadata.rb +104 -0
- data/lib/pubnub/events/get_channel_members.rb +120 -0
- data/lib/pubnub/events/{update_space.rb → get_channel_metadata.rb} +27 -27
- data/lib/pubnub/events/get_memberships.rb +120 -0
- data/lib/pubnub/events/{create_space.rb → get_uuid_metadata.rb} +27 -25
- data/lib/pubnub/events/grant.rb +10 -1
- data/lib/pubnub/events/history.rb +17 -2
- data/lib/pubnub/events/list_push_provisions.rb +29 -12
- data/lib/pubnub/events/remove_channel_members.rb +137 -0
- data/lib/pubnub/events/{delete_space.rb → remove_channel_metadata.rb} +12 -12
- data/lib/pubnub/events/remove_channels_from_push.rb +29 -13
- data/lib/pubnub/events/remove_device_from_push.rb +30 -14
- data/lib/pubnub/events/remove_memberships.rb +137 -0
- data/lib/pubnub/events/{delete_user.rb → remove_uuid_metadata.rb} +12 -12
- data/lib/pubnub/events/set_channel_members.rb +140 -0
- data/lib/pubnub/events/{manage_members.rb → set_channel_metadata.rb} +32 -38
- data/lib/pubnub/events/set_memberships.rb +140 -0
- data/lib/pubnub/events/{create_user.rb → set_uuid_metadata.rb} +33 -17
- data/lib/pubnub/formatter.rb +30 -3
- data/lib/pubnub/pam.rb +2 -11
- data/lib/pubnub/subscribe_callback.rb +1 -3
- data/lib/pubnub/subscribe_event/formatter.rb +26 -17
- data/lib/pubnub/subscriber.rb +5 -6
- data/lib/pubnub/validators/add_channels_to_push.rb +52 -0
- data/lib/pubnub/validators/get_all_channels_metadata.rb +29 -0
- data/lib/pubnub/validators/get_all_uuid_metadata.rb +29 -0
- data/lib/pubnub/validators/get_channel_members.rb +39 -0
- data/lib/pubnub/validators/get_channel_metadata.rb +39 -0
- data/lib/pubnub/validators/get_memberships.rb +39 -0
- data/lib/pubnub/validators/get_uuid_metadata.rb +39 -0
- data/lib/pubnub/validators/grant.rb +37 -2
- data/lib/pubnub/validators/list_push_provisions.rb +43 -0
- data/lib/pubnub/validators/remove_channel_members.rb +52 -0
- data/lib/pubnub/validators/remove_channel_metadata.rb +39 -0
- data/lib/pubnub/validators/remove_channels_from_push.rb +52 -0
- data/lib/pubnub/validators/remove_device_from_push.rb +43 -0
- data/lib/pubnub/validators/remove_memberships.rb +52 -0
- data/lib/pubnub/validators/remove_uuid_metadata.rb +39 -0
- data/lib/pubnub/validators/set_channel_members.rb +78 -0
- data/lib/pubnub/validators/set_channel_metadata.rb +62 -0
- data/lib/pubnub/validators/set_memberships.rb +78 -0
- data/lib/pubnub/validators/set_uuid_metadata.rb +62 -0
- data/lib/pubnub/version.rb +1 -1
- data/pubnub.gemspec +1 -1
- data/spec/examples/add_channels_to_push_spec.rb +178 -0
- data/spec/examples/{grant_examples_spec.rb → grant_examples_1_spec.rb} +0 -8973
- data/spec/examples/grant_examples_2_spec.rb +9107 -0
- data/spec/examples/history_examples_spec.rb +85 -0
- data/spec/examples/list_push_provisions_spec.rb +164 -0
- data/spec/examples/presence_examples_spec.rb +222 -186
- data/spec/examples/remove_channels_from_push_spec.rb +164 -0
- data/spec/examples/remove_device_from_push_spec.rb +164 -0
- data/spec/examples/revoke_examples_1_spec.rb +27013 -0
- data/spec/examples/revoke_examples_2_spec.rb +27012 -0
- data/spec/examples/revoke_examples_3_spec.rb +17967 -0
- data/spec/examples/status_request_message_count_exceeded_spec.rb +4 -1
- data/spec/examples/subscribe_examples_1_spec.rb +26972 -0
- data/spec/examples/subscribe_examples_2_spec.rb +19575 -0
- data/spec/lib/connection_callback_spec.rb +4 -3
- data/spec/lib/event/formatter_spec.rb +22 -0
- data/spec/lib/events/channel_metadata_spec.rb +58 -0
- data/spec/lib/events/grant_spec.rb +3 -2
- data/spec/lib/events/membership_spec.rb +51 -21
- data/spec/lib/events/presence_delta_spec.rb +9 -6
- data/spec/lib/events/presence_spec.rb +13 -7
- data/spec/lib/events/subscribe_spec.rb +102 -65
- data/spec/lib/events/uuid_metadata_spec.rb +86 -0
- data/spec/lib/subscribe_event/formatter_spec.rb +22 -0
- data/spec/lib/super_admin_spec.rb +8 -4
- data/spec/spec_helper.rb +24 -8
- metadata +124 -79
- data/fixtures/vcr_cassettes/lib/events/create_space.yml +0 -40
- data/fixtures/vcr_cassettes/lib/events/create_user.yml +0 -40
- data/fixtures/vcr_cassettes/lib/events/delete_user.yml +0 -38
- data/fixtures/vcr_cassettes/lib/events/get_members.yml +0 -38
- data/fixtures/vcr_cassettes/lib/events/get_space.yml +0 -38
- data/fixtures/vcr_cassettes/lib/events/get_space_memberships.yml +0 -38
- data/fixtures/vcr_cassettes/lib/events/get_spaces.yml +0 -40
- data/fixtures/vcr_cassettes/lib/events/get_user.yml +0 -38
- data/fixtures/vcr_cassettes/lib/events/get_users.yml +0 -40
- data/fixtures/vcr_cassettes/lib/events/manage_members_remove.yml +0 -83
- data/fixtures/vcr_cassettes/lib/events/subscribe-member-add-async.yml +0 -77
- data/fixtures/vcr_cassettes/lib/events/subscribe-membership-add-async.yml +0 -77
- data/fixtures/vcr_cassettes/lib/events/subscribe-space-update-async.yml +0 -77
- data/fixtures/vcr_cassettes/lib/events/update_space.yml +0 -40
- data/fixtures/vcr_cassettes/lib/events/update_user.yml +0 -40
- data/lib/pubnub/events/get_members.rb +0 -93
- data/lib/pubnub/events/get_space.rb +0 -74
- data/lib/pubnub/events/get_space_memberships.rb +0 -93
- data/lib/pubnub/events/get_spaces.rb +0 -90
- data/lib/pubnub/events/get_user.rb +0 -74
- data/lib/pubnub/events/get_users.rb +0 -90
- data/lib/pubnub/events/manage_memberships.rb +0 -105
- data/lib/pubnub/events/update_user.rb +0 -86
- data/lib/pubnub/validators/create_space.rb +0 -44
- data/lib/pubnub/validators/create_user.rb +0 -44
- data/lib/pubnub/validators/delete_space.rb +0 -32
- data/lib/pubnub/validators/delete_user.rb +0 -32
- data/lib/pubnub/validators/get_members.rb +0 -32
- data/lib/pubnub/validators/get_space.rb +0 -32
- data/lib/pubnub/validators/get_space_memberships.rb +0 -32
- data/lib/pubnub/validators/get_spaces.rb +0 -16
- data/lib/pubnub/validators/get_user.rb +0 -32
- data/lib/pubnub/validators/get_users.rb +0 -16
- data/lib/pubnub/validators/manage_members.rb +0 -45
- data/lib/pubnub/validators/manage_memberships.rb +0 -45
- data/lib/pubnub/validators/push.rb +0 -43
- data/lib/pubnub/validators/update_space.rb +0 -45
- data/lib/pubnub/validators/update_user.rb +0 -45
- data/spec/examples/revoke_examples_spec.rb +0 -71950
- data/spec/examples/subscribe_examples_spec.rb +0 -45184
- data/spec/lib/events/space_spec.rb +0 -75
- 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
|
6
|
-
class
|
5
|
+
# Holds SetUuidMetadata functionality
|
6
|
+
class SetUuidMetadata < SingleEvent
|
7
7
|
include Concurrent::Async
|
8
|
-
include Pubnub::Validator::
|
8
|
+
include Pubnub::Validator::SetUuidMetadata
|
9
9
|
|
10
10
|
def initialize(options, app)
|
11
|
-
@event =
|
11
|
+
@event = current_operation
|
12
12
|
@telemetry_name = :l_obj
|
13
|
-
@
|
14
|
-
|
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::
|
29
|
+
Pubnub.logger.debug('Pubnub::SetUuidMetadata') { "Fired event #{self.class}" }
|
20
30
|
|
21
|
-
body = Formatter.format_message(@
|
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::
|
42
|
+
Pubnub::Constants::OPERATION_SET_UUID_METADATA
|
33
43
|
end
|
34
44
|
|
35
|
-
def parameters(
|
36
|
-
parameters = super
|
37
|
-
parameters[:include] = @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
|
-
'
|
53
|
+
'v2',
|
44
54
|
'objects',
|
45
55
|
@subscribe_key,
|
46
|
-
'
|
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:
|
74
|
+
operation: current_operation,
|
59
75
|
client_request: req_res_objects[:request],
|
60
76
|
server_response: req_res_objects[:response],
|
61
|
-
data:
|
77
|
+
data: metadata
|
62
78
|
},
|
63
79
|
|
64
80
|
status: {
|
65
81
|
code: req_res_objects[:response].code,
|
66
|
-
operation:
|
82
|
+
operation: current_operation,
|
67
83
|
client_request: req_res_objects[:request],
|
68
84
|
server_response: req_res_objects[:response],
|
69
85
|
data: nil,
|
data/lib/pubnub/formatter.rb
CHANGED
@@ -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
|
-
|
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')}&"
|
data/lib/pubnub/pam.rb
CHANGED
@@ -14,17 +14,7 @@ module Pubnub
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def signature
|
17
|
-
|
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
|
@@ -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 '
|
176
|
+
when 'uuid'
|
172
177
|
case message[:payload]['event']
|
173
|
-
when '
|
174
|
-
Pubnub::Constants::
|
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::
|
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 '
|
186
|
+
when 'channel'
|
184
187
|
case message[:payload]['event']
|
185
|
-
when '
|
186
|
-
Pubnub::Constants::
|
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::
|
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
|
-
|
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']}."
|
data/lib/pubnub/subscriber.rb
CHANGED
@@ -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::
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
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
|