pusher-chatkit-server 0.7.2 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/lib/chatkit/client.rb +556 -153
- data/lib/chatkit/error.rb +4 -0
- data/lib/chatkit/missing_parameter_error.rb +16 -0
- data/lib/chatkit/response_error.rb +37 -0
- metadata +8 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: fd50747b8046dc072876ab55a6d14fdeff1ced9b
|
4
|
+
data.tar.gz: d7cf32176bd955ac6fec9688dc6084848206d5e1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a3bdffe4d4c45b5b327d37da0d203a4692147172045ae22e857e8052039c7090b8a1dd583bb3a394434063792a7f8dc2f07150e859bf2894676acd54cac432c2
|
7
|
+
data.tar.gz: ed6bbf3cb9da4888ebfb9780cb19b30217a86251681fc50817fc45e73b062f5716a5034098b91ddb4d1bcd8715164ccc08cfe3c850b0e7066182ada9f68c2595
|
data/lib/chatkit/client.rb
CHANGED
@@ -1,15 +1,18 @@
|
|
1
1
|
require 'pusher-platform'
|
2
2
|
require 'json'
|
3
|
+
require 'cgi'
|
4
|
+
|
5
|
+
require_relative './error'
|
6
|
+
require_relative './missing_parameter_error'
|
7
|
+
require_relative './response_error'
|
3
8
|
|
4
9
|
module Chatkit
|
10
|
+
|
5
11
|
ROOM_SCOPE = "room"
|
6
12
|
GLOBAL_SCOPE = "global"
|
7
13
|
|
8
|
-
class Error < RuntimeError
|
9
|
-
end
|
10
|
-
|
11
14
|
class Client
|
12
|
-
attr_accessor :api_instance, :authorizer_instance
|
15
|
+
attr_accessor :api_instance, :authorizer_instance, :cursors_instance
|
13
16
|
|
14
17
|
def initialize(options)
|
15
18
|
base_options = {
|
@@ -17,20 +20,31 @@ module Chatkit
|
|
17
20
|
key: options[:key],
|
18
21
|
port: options[:port],
|
19
22
|
host: options[:host],
|
20
|
-
client: options[:client]
|
23
|
+
client: options[:client],
|
24
|
+
sdk_info: PusherPlatform::SDKInfo.new({
|
25
|
+
product_name: 'chatkit',
|
26
|
+
version: '0.7.2'
|
27
|
+
})
|
21
28
|
}
|
22
29
|
|
23
30
|
@api_instance = PusherPlatform::Instance.new(
|
24
|
-
base_options.merge
|
31
|
+
base_options.merge({
|
25
32
|
service_name: 'chatkit',
|
26
|
-
service_version: '
|
33
|
+
service_version: 'v2'
|
27
34
|
})
|
28
35
|
)
|
29
36
|
|
30
37
|
@authorizer_instance = PusherPlatform::Instance.new(
|
31
|
-
base_options.merge
|
38
|
+
base_options.merge({
|
32
39
|
service_name: 'chatkit_authorizer',
|
33
|
-
service_version: '
|
40
|
+
service_version: 'v2'
|
41
|
+
})
|
42
|
+
)
|
43
|
+
|
44
|
+
@cursors_instance = PusherPlatform::Instance.new(
|
45
|
+
base_options.merge({
|
46
|
+
service_name: 'chatkit_cursors',
|
47
|
+
service_version: 'v2'
|
34
48
|
})
|
35
49
|
)
|
36
50
|
end
|
@@ -43,269 +57,658 @@ module Chatkit
|
|
43
57
|
@api_instance.authenticate(auth_payload, { user_id: user_id })
|
44
58
|
end
|
45
59
|
|
46
|
-
def authenticate_with_request(request, options)
|
47
|
-
@api_instance.authenticate_with_request(request, options)
|
48
|
-
end
|
49
|
-
|
50
60
|
def generate_access_token(options)
|
61
|
+
if options.empty?
|
62
|
+
raise Chatkit::Error.new("You must provide a either a user_id or `su: true`")
|
63
|
+
end
|
64
|
+
|
51
65
|
@api_instance.generate_access_token(options)
|
52
66
|
end
|
53
67
|
|
54
68
|
def generate_su_token(options = {})
|
55
|
-
generate_access_token({ su: true }.merge(options))
|
69
|
+
generate_access_token({ su: true }.merge(options))
|
56
70
|
end
|
57
71
|
|
58
72
|
# User API
|
59
73
|
|
60
|
-
def create_user(
|
74
|
+
def create_user(options)
|
75
|
+
if options[:id].nil?
|
76
|
+
raise Chatkit::MissingParameterError.new("You must provide an ID for the user you want to create")
|
77
|
+
end
|
78
|
+
|
79
|
+
if options[:name].nil?
|
80
|
+
raise Chatkit::MissingParameterError.new("You must provide a name for the user you want to create")
|
81
|
+
end
|
82
|
+
|
61
83
|
body = {
|
62
|
-
id: id,
|
63
|
-
name: name
|
84
|
+
id: options[:id],
|
85
|
+
name: options[:name]
|
64
86
|
}
|
65
87
|
|
66
|
-
unless avatar_url.nil?
|
67
|
-
body[:avatar_url] = avatar_url
|
88
|
+
unless options[:avatar_url].nil?
|
89
|
+
body[:avatar_url] = options[:avatar_url]
|
68
90
|
end
|
69
91
|
|
70
|
-
unless custom_data.nil?
|
71
|
-
body[:custom_data] = custom_data
|
92
|
+
unless options[:custom_data].nil?
|
93
|
+
body[:custom_data] = options[:custom_data]
|
72
94
|
end
|
73
95
|
|
74
|
-
|
96
|
+
api_request({
|
75
97
|
method: "POST",
|
76
98
|
path: "/users",
|
77
|
-
headers: {
|
78
|
-
"Content-Type": "application/json",
|
79
|
-
},
|
80
99
|
body: body,
|
81
|
-
jwt: generate_su_token
|
82
|
-
)
|
100
|
+
jwt: generate_su_token[:token]
|
101
|
+
})
|
102
|
+
end
|
103
|
+
|
104
|
+
def create_users(options)
|
105
|
+
if options[:users].nil?
|
106
|
+
raise Chatkit::MissingParameterError.new("You must provide a list of users that you want to create")
|
107
|
+
end
|
108
|
+
|
109
|
+
api_request({
|
110
|
+
method: "POST",
|
111
|
+
path: "/batch_users",
|
112
|
+
body: options,
|
113
|
+
jwt: generate_su_token[:token]
|
114
|
+
})
|
115
|
+
end
|
116
|
+
|
117
|
+
def update_user(options)
|
118
|
+
if options[:id].nil?
|
119
|
+
raise Chatkit::MissingParameterError.new("You must provide the ID of the user you want to update")
|
120
|
+
end
|
121
|
+
|
122
|
+
payload = {}
|
123
|
+
payload[:name] = options[:name] unless options[:name].nil?
|
124
|
+
payload[:avatar_url] = options[:avatar_url] unless options[:avatar_url].nil?
|
125
|
+
payload[:custom_data] = options[:custom_data] unless options[:custom_data].nil?
|
126
|
+
|
127
|
+
api_request({
|
128
|
+
method: "PUT",
|
129
|
+
path: "/users/#{CGI::escape options[:id]}",
|
130
|
+
body: payload,
|
131
|
+
jwt: generate_su_token({ user_id: options[:id] })[:token]
|
132
|
+
})
|
83
133
|
end
|
84
134
|
|
85
|
-
def delete_user(
|
86
|
-
|
135
|
+
def delete_user(options)
|
136
|
+
if options[:id].nil?
|
137
|
+
raise Chatkit::MissingParameterError.new("You must provide the ID of the user you want to delete")
|
138
|
+
end
|
139
|
+
|
140
|
+
api_request({
|
87
141
|
method: "DELETE",
|
88
|
-
path: "/users/#{id}",
|
89
|
-
jwt: generate_su_token
|
90
|
-
)
|
142
|
+
path: "/users/#{CGI::escape options[:id]}",
|
143
|
+
jwt: generate_su_token[:token]
|
144
|
+
})
|
145
|
+
end
|
146
|
+
|
147
|
+
def get_user(options)
|
148
|
+
if options[:id].nil?
|
149
|
+
raise Chatkit::MissingParameterError.new("You must provide the ID of the user you want to fetch")
|
150
|
+
end
|
151
|
+
|
152
|
+
api_request({
|
153
|
+
method: "GET",
|
154
|
+
path: "/users/#{CGI::escape options[:id]}",
|
155
|
+
jwt: generate_su_token[:token]
|
156
|
+
})
|
91
157
|
end
|
92
158
|
|
93
|
-
def get_users(
|
159
|
+
def get_users(options = nil)
|
94
160
|
request_options = {
|
95
161
|
method: "GET",
|
96
162
|
path: "/users",
|
97
|
-
jwt: generate_su_token
|
163
|
+
jwt: generate_su_token[:token]
|
98
164
|
}
|
99
165
|
|
100
|
-
unless
|
101
|
-
|
166
|
+
unless options.nil?
|
167
|
+
query = {}
|
168
|
+
query[:from_ts] = options[:from_timestamp] unless options[:from_timestamp].nil?
|
169
|
+
query[:limit] = options[:limit] unless options[:limit].nil?
|
170
|
+
|
171
|
+
request_options.merge!({
|
172
|
+
query: query
|
173
|
+
})
|
102
174
|
end
|
103
175
|
|
104
|
-
|
176
|
+
api_request(request_options)
|
105
177
|
end
|
106
178
|
|
107
|
-
def
|
108
|
-
|
179
|
+
def get_users_by_id(options)
|
180
|
+
if options[:user_ids].nil?
|
181
|
+
raise Chatkit::MissingParameterError.new("You must provide the IDs of the users you want to fetch")
|
182
|
+
end
|
183
|
+
|
184
|
+
api_request({
|
109
185
|
method: "GET",
|
110
186
|
path: "/users_by_ids",
|
111
187
|
query: {
|
112
|
-
|
113
|
-
|
114
|
-
jwt: generate_su_token
|
115
|
-
)
|
188
|
+
id: options[:user_ids],
|
189
|
+
},
|
190
|
+
jwt: generate_su_token[:token]
|
191
|
+
})
|
116
192
|
end
|
117
193
|
|
118
194
|
# Room API
|
119
195
|
|
120
|
-
def
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
196
|
+
def create_room(options)
|
197
|
+
if options[:creator_id].nil?
|
198
|
+
raise Chatkit::MissingParameterError.new("You must provide the ID of the user creating the room")
|
199
|
+
end
|
200
|
+
|
201
|
+
if options[:name].nil?
|
202
|
+
raise Chatkit::MissingParameterError.new("You must provide a name for the room")
|
203
|
+
end
|
204
|
+
|
205
|
+
body = {
|
206
|
+
name: options[:name],
|
207
|
+
private: options[:private] || false
|
208
|
+
}
|
209
|
+
|
210
|
+
unless options[:user_ids].nil?
|
211
|
+
body[:user_ids] = options[:user_ids]
|
212
|
+
end
|
213
|
+
|
214
|
+
api_request({
|
215
|
+
method: "POST",
|
216
|
+
path: "/rooms",
|
217
|
+
body: body,
|
218
|
+
jwt: generate_su_token({ user_id: options[:creator_id] })[:token]
|
219
|
+
})
|
126
220
|
end
|
127
221
|
|
128
|
-
def
|
129
|
-
|
222
|
+
def update_room(options)
|
223
|
+
if options[:id].nil?
|
224
|
+
raise Chatkit::MissingParameterError.new("You must provide the ID of the room to update")
|
225
|
+
end
|
226
|
+
|
227
|
+
payload = {}
|
228
|
+
payload[:name] = options[:name] unless options[:name].nil?
|
229
|
+
payload[:private] = options[:private] unless options[:private].nil?
|
230
|
+
|
231
|
+
api_request({
|
232
|
+
method: "PUT",
|
233
|
+
path: "/rooms/#{CGI::escape options[:id]}",
|
234
|
+
body: payload,
|
235
|
+
jwt: generate_su_token[:token]
|
236
|
+
})
|
237
|
+
end
|
130
238
|
|
131
|
-
|
132
|
-
|
133
|
-
|
239
|
+
def delete_room(options)
|
240
|
+
if options[:id].nil?
|
241
|
+
raise Chatkit::MissingParameterError.new("You must provide the ID of the room to delete")
|
242
|
+
end
|
134
243
|
|
135
|
-
|
244
|
+
api_request({
|
245
|
+
method: "DELETE",
|
246
|
+
path: "/rooms/#{CGI::escape options[:id]}",
|
247
|
+
jwt: generate_su_token[:token]
|
248
|
+
})
|
249
|
+
end
|
250
|
+
|
251
|
+
def get_room(options)
|
252
|
+
if options[:id].nil?
|
253
|
+
raise Chatkit::MissingParameterError.new("You must provide the ID of the room to fetch")
|
254
|
+
end
|
255
|
+
|
256
|
+
api_request({
|
136
257
|
method: "GET",
|
137
|
-
path: "/rooms/#{
|
138
|
-
|
139
|
-
|
140
|
-
)
|
258
|
+
path: "/rooms/#{CGI::escape options[:id]}",
|
259
|
+
jwt: generate_su_token[:token]
|
260
|
+
})
|
141
261
|
end
|
142
262
|
|
143
|
-
def get_rooms(
|
263
|
+
def get_rooms(options = nil)
|
144
264
|
request_options = {
|
145
265
|
method: "GET",
|
146
266
|
path: "/rooms",
|
147
|
-
jwt: generate_su_token
|
267
|
+
jwt: generate_su_token[:token]
|
268
|
+
}
|
269
|
+
|
270
|
+
unless options.nil?
|
271
|
+
query = {}
|
272
|
+
query[:include_private] = !options[:include_private].nil? ? options[:include_private] : false
|
273
|
+
query[:from_id] = options[:from_id] unless options[:from_id].nil?
|
274
|
+
|
275
|
+
request_options.merge!({
|
276
|
+
query: query
|
277
|
+
})
|
278
|
+
end
|
279
|
+
|
280
|
+
api_request(request_options)
|
281
|
+
end
|
282
|
+
|
283
|
+
def get_user_rooms(options)
|
284
|
+
get_rooms_for_user(options)
|
285
|
+
end
|
286
|
+
|
287
|
+
def get_user_joinable_rooms(options)
|
288
|
+
options[:joinable] = true
|
289
|
+
get_rooms_for_user(options)
|
290
|
+
end
|
291
|
+
|
292
|
+
def add_users_to_room(options)
|
293
|
+
if options[:room_id].nil?
|
294
|
+
raise Chatkit::MissingParameterError.new("You must provide the ID of the room you want to add users to")
|
295
|
+
end
|
296
|
+
|
297
|
+
if options[:user_ids].nil?
|
298
|
+
raise Chatkit::MissingParameterError.new("You must provide a list of IDs of the users you want to add to the room")
|
299
|
+
end
|
300
|
+
|
301
|
+
api_request({
|
302
|
+
method: "PUT",
|
303
|
+
path: "/rooms/#{CGI::escape options[:room_id]}/users/add",
|
304
|
+
body: { user_ids: options[:user_ids] },
|
305
|
+
jwt: generate_su_token[:token]
|
306
|
+
})
|
307
|
+
end
|
308
|
+
|
309
|
+
def remove_users_from_room(options)
|
310
|
+
if options[:room_id].nil?
|
311
|
+
raise Chatkit::MissingParameterError.new("You must provide the ID of the room you want to remove users from")
|
312
|
+
end
|
313
|
+
|
314
|
+
if options[:user_ids].nil?
|
315
|
+
raise Chatkit::MissingParameterError.new("You must provide a list of IDs of the users you want to remove from the room")
|
316
|
+
end
|
317
|
+
|
318
|
+
api_request({
|
319
|
+
method: "PUT",
|
320
|
+
path: "/rooms/#{CGI::escape options[:room_id]}/users/remove",
|
321
|
+
body: { user_ids: options[:user_ids] },
|
322
|
+
jwt: generate_su_token[:token]
|
323
|
+
})
|
324
|
+
end
|
325
|
+
|
326
|
+
# Messages API
|
327
|
+
|
328
|
+
def get_room_messages(options)
|
329
|
+
if options[:room_id].nil?
|
330
|
+
raise Chatkit::MissingParameterError.new("You must provide the ID of the room to fetch messages from")
|
331
|
+
end
|
332
|
+
|
333
|
+
query_params = {}
|
334
|
+
query_params[:initial_id] = options[:initial_id] unless options[:initial_id].nil?
|
335
|
+
query_params[:direction] = options[:direction] unless options[:direction].nil?
|
336
|
+
query_params[:limit] = options[:limit] unless options[:limit].nil?
|
337
|
+
|
338
|
+
api_request({
|
339
|
+
method: "GET",
|
340
|
+
path: "/rooms/#{CGI::escape options[:room_id]}/messages",
|
341
|
+
query: query_params,
|
342
|
+
jwt: generate_su_token[:token]
|
343
|
+
})
|
344
|
+
end
|
345
|
+
|
346
|
+
def send_message(options)
|
347
|
+
if options[:room_id].nil?
|
348
|
+
raise Chatkit::MissingParameterError.new("You must provide the ID of the room to send the message to")
|
349
|
+
end
|
350
|
+
|
351
|
+
if options[:sender_id].nil?
|
352
|
+
raise Chatkit::MissingParameterError.new("You must provide the ID of the user sending the message")
|
353
|
+
end
|
354
|
+
|
355
|
+
if options[:text].nil?
|
356
|
+
raise Chatkit::MissingParameterError.new("You must provide some text for the message")
|
357
|
+
end
|
358
|
+
|
359
|
+
attachment = options[:attachment]
|
360
|
+
|
361
|
+
unless attachment.nil?
|
362
|
+
if attachment[:resource_link].nil?
|
363
|
+
raise Chatkit::MissingParameterError.new("You must provide a resource_link for the message attachment")
|
364
|
+
end
|
365
|
+
|
366
|
+
valid_file_types = ['image', 'video', 'audio', 'file']
|
367
|
+
|
368
|
+
if attachment[:type].nil? || !valid_file_types.include?(attachment[:type])
|
369
|
+
raise Chatkit::MissingParameterError.new(
|
370
|
+
"You must provide a valid type for the message attachment, i.e. one of: #{valid_file_types.join(', ')}"
|
371
|
+
)
|
372
|
+
end
|
373
|
+
end
|
374
|
+
|
375
|
+
payload = {
|
376
|
+
text: options[:text],
|
377
|
+
attachment: options[:attachment]
|
148
378
|
}
|
149
379
|
|
150
|
-
|
151
|
-
|
380
|
+
api_request({
|
381
|
+
method: "POST",
|
382
|
+
path: "/rooms/#{CGI::escape options[:room_id]}/messages",
|
383
|
+
body: payload,
|
384
|
+
jwt: generate_su_token({ user_id: options[:sender_id] })[:token]
|
385
|
+
})
|
386
|
+
end
|
387
|
+
|
388
|
+
def delete_message(options)
|
389
|
+
if options[:id].nil?
|
390
|
+
raise Chatkit::MissingParameterError.new("You must provide the ID of the message you want to delete")
|
152
391
|
end
|
153
392
|
|
154
|
-
|
393
|
+
api_request({
|
394
|
+
method: "DELETE",
|
395
|
+
path: "/messages/#{options[:id]}",
|
396
|
+
jwt: generate_su_token[:token]
|
397
|
+
})
|
155
398
|
end
|
156
399
|
|
157
|
-
#
|
400
|
+
# Roles and permissions API
|
158
401
|
|
159
|
-
def
|
160
|
-
|
402
|
+
def create_global_role(options)
|
403
|
+
options[:scope] = GLOBAL_SCOPE
|
404
|
+
create_role(options)
|
161
405
|
end
|
162
406
|
|
163
|
-
def
|
164
|
-
|
407
|
+
def create_room_role(options)
|
408
|
+
options[:scope] = ROOM_SCOPE
|
409
|
+
create_role(options)
|
165
410
|
end
|
166
411
|
|
167
|
-
def
|
168
|
-
|
412
|
+
def delete_global_role(options)
|
413
|
+
options[:scope] = GLOBAL_SCOPE
|
414
|
+
delete_role(options)
|
169
415
|
end
|
170
416
|
|
171
|
-
def
|
172
|
-
|
417
|
+
def delete_room_role(options)
|
418
|
+
options[:scope] = ROOM_SCOPE
|
419
|
+
delete_role(options)
|
173
420
|
end
|
174
421
|
|
175
|
-
def assign_global_role_to_user(
|
176
|
-
assign_role_to_user(
|
422
|
+
def assign_global_role_to_user(options)
|
423
|
+
assign_role_to_user(options)
|
177
424
|
end
|
178
425
|
|
179
|
-
def assign_room_role_to_user(
|
180
|
-
|
426
|
+
def assign_room_role_to_user(options)
|
427
|
+
if options[:room_id].nil?
|
428
|
+
raise Chatkit::MissingParameterError.new("You must provide a room ID to assign a room role to a user")
|
429
|
+
end
|
430
|
+
|
431
|
+
assign_role_to_user(options)
|
181
432
|
end
|
182
433
|
|
183
434
|
def get_roles
|
184
|
-
|
435
|
+
authorizer_request({
|
185
436
|
method: "GET",
|
186
437
|
path: "/roles",
|
187
|
-
jwt: generate_su_token
|
188
|
-
)
|
189
|
-
|
190
|
-
JSON.parse(resp.body)
|
438
|
+
jwt: generate_su_token[:token]
|
439
|
+
})
|
191
440
|
end
|
192
441
|
|
193
|
-
def get_user_roles(
|
194
|
-
|
442
|
+
def get_user_roles(options)
|
443
|
+
if options[:user_id].nil?
|
444
|
+
raise Chatkit::MissingParameterError.new("You must provide the ID of the user whose roles you want to fetch")
|
445
|
+
end
|
446
|
+
|
447
|
+
authorizer_request({
|
195
448
|
method: "GET",
|
196
|
-
path: "/users/#{user_id}/roles",
|
197
|
-
jwt: generate_su_token
|
198
|
-
)
|
449
|
+
path: "/users/#{CGI::escape options[:user_id]}/roles",
|
450
|
+
jwt: generate_su_token[:token]
|
451
|
+
})
|
452
|
+
end
|
453
|
+
|
454
|
+
def remove_global_role_for_user(options)
|
455
|
+
remove_role_for_user(options)
|
456
|
+
end
|
457
|
+
|
458
|
+
def remove_room_role_for_user(options)
|
459
|
+
if options[:room_id].nil?
|
460
|
+
raise Chatkit::MissingParameterError.new("You must provide a room ID")
|
461
|
+
end
|
462
|
+
|
463
|
+
remove_role_for_user(options)
|
464
|
+
end
|
199
465
|
|
200
|
-
|
466
|
+
def get_permissions_for_global_role(options)
|
467
|
+
options[:scope] = GLOBAL_SCOPE
|
468
|
+
get_permissions_for_role(options)
|
201
469
|
end
|
202
470
|
|
203
|
-
def
|
204
|
-
|
471
|
+
def get_permissions_for_room_role(options)
|
472
|
+
options[:scope] = ROOM_SCOPE
|
473
|
+
get_permissions_for_role(options)
|
205
474
|
end
|
206
475
|
|
207
|
-
def
|
208
|
-
|
476
|
+
def update_permissions_for_global_role(options)
|
477
|
+
options[:scope] = GLOBAL_SCOPE
|
478
|
+
update_permissions_for_role(options)
|
209
479
|
end
|
210
480
|
|
211
|
-
def
|
212
|
-
|
481
|
+
def update_permissions_for_room_role(options)
|
482
|
+
options[:scope] = ROOM_SCOPE
|
483
|
+
update_permissions_for_role(options)
|
213
484
|
end
|
214
485
|
|
215
|
-
|
216
|
-
|
486
|
+
# Cursors API
|
487
|
+
|
488
|
+
def get_read_cursor(options)
|
489
|
+
if options[:user_id].nil?
|
490
|
+
raise Chatkit::MissingParameterError.new("You must provide the ID of the user whose read cursor you want to fetch")
|
491
|
+
end
|
492
|
+
|
493
|
+
if options[:room_id].nil?
|
494
|
+
raise Chatkit::MissingParameterError.new("You must provide the ID of the room that you want the read cursor for")
|
495
|
+
end
|
496
|
+
|
497
|
+
cursors_request({
|
498
|
+
method: "GET",
|
499
|
+
path: "/cursors/0/rooms/#{CGI::escape options[:room_id]}/users/#{CGI::escape options[:user_id]}",
|
500
|
+
jwt: generate_su_token[:token]
|
501
|
+
})
|
217
502
|
end
|
218
503
|
|
219
|
-
def
|
220
|
-
if
|
221
|
-
raise Chatkit::
|
504
|
+
def set_read_cursor(options)
|
505
|
+
if options[:user_id].nil?
|
506
|
+
raise Chatkit::MissingParameterError.new("You must provide the ID of the user whose read cursor you want to set")
|
222
507
|
end
|
223
508
|
|
224
|
-
|
225
|
-
|
226
|
-
|
509
|
+
if options[:room_id].nil?
|
510
|
+
raise Chatkit::MissingParameterError.new("You must provide the ID of the room you want to set the user's cursor in")
|
511
|
+
end
|
512
|
+
|
513
|
+
if options[:position].nil?
|
514
|
+
raise Chatkit::MissingParameterError.new("You must provide position of the read cursor")
|
515
|
+
end
|
227
516
|
|
228
|
-
|
517
|
+
cursors_request({
|
229
518
|
method: "PUT",
|
230
|
-
path: "/
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
519
|
+
path: "/cursors/0/rooms/#{CGI::escape options[:room_id]}/users/#{CGI::escape options[:user_id]}",
|
520
|
+
body: { position: options[:position] },
|
521
|
+
jwt: generate_su_token[:token]
|
522
|
+
})
|
523
|
+
end
|
524
|
+
|
525
|
+
def get_user_read_cursors(options)
|
526
|
+
if options[:user_id].nil?
|
527
|
+
raise Chatkit::MissingParameterError.new("You must provide the ID of the user whose read cursors you want to fetch")
|
528
|
+
end
|
529
|
+
|
530
|
+
cursors_request({
|
531
|
+
method: "GET",
|
532
|
+
path: "/cursors/0/users/#{CGI::escape options[:user_id]}",
|
533
|
+
jwt: generate_su_token[:token]
|
534
|
+
})
|
535
|
+
end
|
536
|
+
|
537
|
+
def get_room_read_cursors(options)
|
538
|
+
if options[:room_id].nil?
|
539
|
+
raise Chatkit::MissingParameterError.new("You must provide the ID of the room that you want the read cursors for")
|
540
|
+
end
|
541
|
+
|
542
|
+
cursors_request({
|
543
|
+
method: "GET",
|
544
|
+
path: "/cursors/0/rooms/#{CGI::escape options[:room_id]}",
|
545
|
+
jwt: generate_su_token[:token]
|
546
|
+
})
|
547
|
+
end
|
548
|
+
|
549
|
+
# Service-specific helpers
|
550
|
+
|
551
|
+
def api_request(options)
|
552
|
+
make_request(@api_instance, options)
|
553
|
+
end
|
554
|
+
|
555
|
+
def authorizer_request(options)
|
556
|
+
make_request(@authorizer_instance, options)
|
557
|
+
end
|
558
|
+
|
559
|
+
def cursors_request(options)
|
560
|
+
make_request(@cursors_instance, options)
|
237
561
|
end
|
238
562
|
|
239
563
|
private
|
240
564
|
|
241
|
-
def
|
242
|
-
|
565
|
+
def make_request(instance, options)
|
566
|
+
options.merge!({ headers: { "Content-Type": "application/json" } })
|
567
|
+
begin
|
568
|
+
format_response(instance.request(options))
|
569
|
+
rescue PusherPlatform::ErrorResponse => e
|
570
|
+
raise Chatkit::ResponseError.new(e)
|
571
|
+
rescue PusherPlatform::Error => e
|
572
|
+
raise Chatkit::Error.new(e.message)
|
573
|
+
end
|
574
|
+
end
|
575
|
+
|
576
|
+
def format_response(res)
|
577
|
+
body = res.body.empty? ? nil : JSON.parse(res.body, { symbolize_names: true })
|
578
|
+
|
579
|
+
{
|
580
|
+
status: res.status,
|
581
|
+
headers: res.headers,
|
582
|
+
body: body
|
583
|
+
}
|
584
|
+
end
|
585
|
+
|
586
|
+
def get_rooms_for_user(options)
|
587
|
+
if options[:id].nil?
|
588
|
+
raise Chatkit::MissingParameterError.new("You must provide the ID of the user whose rooms you want to fetch")
|
589
|
+
end
|
590
|
+
|
591
|
+
request_options = {
|
592
|
+
method: "GET",
|
593
|
+
path: "/users/#{CGI::escape options[:id]}/rooms",
|
594
|
+
jwt: generate_su_token[:token]
|
595
|
+
}
|
596
|
+
|
597
|
+
unless options[:joinable].nil?
|
598
|
+
request_options.merge!({ query: { joinable: options[:joinable] }})
|
599
|
+
end
|
600
|
+
|
601
|
+
api_request(request_options)
|
602
|
+
end
|
603
|
+
|
604
|
+
def create_role(options)
|
605
|
+
if options[:name].nil?
|
606
|
+
raise Chatkit::MissingParameterError.new("You must provide a name for the role")
|
607
|
+
end
|
608
|
+
|
609
|
+
if options[:permissions].nil?
|
610
|
+
raise Chatkit::MissingParameterError.new("You must provide permissions for the role, even if it's an empty list")
|
611
|
+
end
|
612
|
+
|
613
|
+
authorizer_request({
|
243
614
|
method: "POST",
|
244
615
|
path: "/roles",
|
245
|
-
headers: {
|
246
|
-
"Content-Type": "application/json"
|
247
|
-
},
|
248
616
|
body: {
|
249
|
-
scope: scope,
|
250
|
-
name: name,
|
251
|
-
permissions: permissions,
|
617
|
+
scope: options[:scope],
|
618
|
+
name: options[:name],
|
619
|
+
permissions: options[:permissions],
|
252
620
|
},
|
253
|
-
jwt: generate_su_token
|
254
|
-
)
|
621
|
+
jwt: generate_su_token[:token]
|
622
|
+
})
|
255
623
|
end
|
256
624
|
|
257
|
-
def delete_role(
|
258
|
-
|
625
|
+
def delete_role(options)
|
626
|
+
if options[:name].nil?
|
627
|
+
raise Chatkit::MissingParameterError.new("You must provide the role's name")
|
628
|
+
end
|
629
|
+
|
630
|
+
authorizer_request({
|
259
631
|
method: "DELETE",
|
260
|
-
path: "/roles/#{
|
261
|
-
jwt: generate_su_token
|
262
|
-
)
|
632
|
+
path: "/roles/#{CGI::escape options[:name]}/scope/#{options[:scope]}",
|
633
|
+
jwt: generate_su_token[:token]
|
634
|
+
})
|
263
635
|
end
|
264
636
|
|
265
|
-
def assign_role_to_user(
|
266
|
-
|
637
|
+
def assign_role_to_user(options)
|
638
|
+
if options[:name].nil?
|
639
|
+
raise Chatkit::MissingParameterError.new("You must provide the role's name")
|
640
|
+
end
|
641
|
+
|
642
|
+
if options[:user_id].nil?
|
643
|
+
raise Chatkit::MissingParameterError.new("You must provide the ID of the user you want to assign the role to")
|
644
|
+
end
|
645
|
+
|
646
|
+
body = { name: options[:name] }
|
267
647
|
|
268
|
-
unless room_id.nil?
|
269
|
-
body.merge!(room_id: room_id)
|
648
|
+
unless options[:room_id].nil?
|
649
|
+
body.merge!(room_id: options[:room_id])
|
270
650
|
end
|
271
651
|
|
272
|
-
|
652
|
+
authorizer_request({
|
273
653
|
method: "PUT",
|
274
|
-
path: "/users/#{user_id}/roles",
|
275
|
-
headers: {
|
276
|
-
"Content-Type": "application/json",
|
277
|
-
},
|
654
|
+
path: "/users/#{CGI::escape options[:user_id]}/roles",
|
278
655
|
body: body,
|
279
|
-
jwt: generate_su_token
|
280
|
-
)
|
656
|
+
jwt: generate_su_token[:token]
|
657
|
+
})
|
281
658
|
end
|
282
659
|
|
283
|
-
def remove_role_for_user(
|
284
|
-
options
|
660
|
+
def remove_role_for_user(options)
|
661
|
+
if options[:user_id].nil?
|
662
|
+
raise Chatkit::MissingParameterError.new("You must provide the ID of the user you want to remove the role for")
|
663
|
+
end
|
664
|
+
|
665
|
+
request_options = {
|
285
666
|
method: "DELETE",
|
286
|
-
path: "/users/#{user_id}/roles",
|
287
|
-
|
288
|
-
"Content-Type": "application/json",
|
289
|
-
},
|
290
|
-
query: { room_id: room_id },
|
291
|
-
jwt: generate_su_token
|
667
|
+
path: "/users/#{CGI::escape options[:user_id]}/roles",
|
668
|
+
jwt: generate_su_token[:token]
|
292
669
|
}
|
293
670
|
|
294
|
-
unless room_id.nil?
|
295
|
-
|
671
|
+
unless options[:room_id].nil?
|
672
|
+
request_options.merge!({ query: { room_id: options[:room_id] }})
|
296
673
|
end
|
297
674
|
|
298
|
-
|
675
|
+
authorizer_request(request_options)
|
299
676
|
end
|
300
677
|
|
301
|
-
def get_permissions_for_role(
|
302
|
-
|
678
|
+
def get_permissions_for_role(options)
|
679
|
+
if options[:name].nil?
|
680
|
+
raise Chatkit::MissingParameterError.new("You must provide the name of the role you want to fetch the permissions of")
|
681
|
+
end
|
682
|
+
|
683
|
+
authorizer_request({
|
303
684
|
method: "GET",
|
304
|
-
path: "/roles/#{
|
305
|
-
jwt: generate_su_token
|
306
|
-
)
|
685
|
+
path: "/roles/#{CGI::escape options[:name]}/scope/#{options[:scope]}/permissions",
|
686
|
+
jwt: generate_su_token[:token]
|
687
|
+
})
|
688
|
+
end
|
689
|
+
|
690
|
+
def update_permissions_for_role(options)
|
691
|
+
if options[:name].nil?
|
692
|
+
raise Chatkit::MissingParameterError.new("You must provide the name of the role you want to update the permissions of")
|
693
|
+
end
|
694
|
+
|
695
|
+
permissions_to_add = options[:permissions_to_add]
|
696
|
+
permissions_to_remove = options[:permissions_to_remove]
|
307
697
|
|
308
|
-
|
698
|
+
if (permissions_to_add.nil? || permissions_to_add.empty?) && (permissions_to_remove.nil? || permissions_to_remove.empty?)
|
699
|
+
raise Chatkit::MissingParameterError.new("permissions_to_add and permissions_to_remove cannot both be empty")
|
700
|
+
end
|
701
|
+
|
702
|
+
body = {}
|
703
|
+
body[:add_permissions] = permissions_to_add unless permissions_to_add.nil? || permissions_to_add.empty?
|
704
|
+
body[:remove_permissions] = permissions_to_remove unless permissions_to_remove.nil? ||permissions_to_remove.empty?
|
705
|
+
|
706
|
+
authorizer_request({
|
707
|
+
method: "PUT",
|
708
|
+
path: "/roles/#{CGI::escape options[:name]}/scope/#{options[:scope]}/permissions",
|
709
|
+
body: body,
|
710
|
+
jwt: generate_su_token[:token]
|
711
|
+
})
|
309
712
|
end
|
310
713
|
end
|
311
714
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require_relative './error'
|
2
|
+
|
3
|
+
module Chatkit
|
4
|
+
class MissingParameterError < Chatkit::Error
|
5
|
+
attr_accessor :message
|
6
|
+
|
7
|
+
def initialize(message)
|
8
|
+
@message = message
|
9
|
+
end
|
10
|
+
|
11
|
+
def to_s
|
12
|
+
"Chatkit::MissingParameterError - #{@message}"
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require_relative './error'
|
2
|
+
|
3
|
+
module Chatkit
|
4
|
+
class ResponseError < Chatkit::Error
|
5
|
+
attr_reader :status, :headers, :error_description, :error, :error_uri
|
6
|
+
|
7
|
+
def initialize(platform_error)
|
8
|
+
@status = platform_error.status
|
9
|
+
@headers = platform_error.headers
|
10
|
+
@error = platform_error.error
|
11
|
+
@error_description = platform_error.error_description
|
12
|
+
@error_uri = platform_error.error_uri
|
13
|
+
end
|
14
|
+
|
15
|
+
def to_s
|
16
|
+
output = "Chatkit::ResponseError - status: #{@status} description: #{@error_description}."
|
17
|
+
output += " Find out more at #{@error_uri}" if @error_uri
|
18
|
+
output
|
19
|
+
end
|
20
|
+
|
21
|
+
def as_json(options = {})
|
22
|
+
json = {
|
23
|
+
status: @status,
|
24
|
+
headers: @headers,
|
25
|
+
error: @error,
|
26
|
+
error_description: @error_description,
|
27
|
+
}
|
28
|
+
json[:error_uri] = @error_uri unless @error_uri.nil?
|
29
|
+
json
|
30
|
+
end
|
31
|
+
|
32
|
+
def to_json(*options)
|
33
|
+
as_json(*options).to_json(*options)
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pusher-chatkit-server
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pusher
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-10-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pusher-platform
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
19
|
+
version: 0.11.2
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.
|
26
|
+
version: 0.11.2
|
27
27
|
description:
|
28
28
|
email: support@pusher.com
|
29
29
|
executables: []
|
@@ -32,6 +32,9 @@ extra_rdoc_files: []
|
|
32
32
|
files:
|
33
33
|
- lib/chatkit.rb
|
34
34
|
- lib/chatkit/client.rb
|
35
|
+
- lib/chatkit/error.rb
|
36
|
+
- lib/chatkit/missing_parameter_error.rb
|
37
|
+
- lib/chatkit/response_error.rb
|
35
38
|
homepage:
|
36
39
|
licenses:
|
37
40
|
- MIT
|
@@ -52,7 +55,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
52
55
|
version: '0'
|
53
56
|
requirements: []
|
54
57
|
rubyforge_project:
|
55
|
-
rubygems_version: 2.
|
58
|
+
rubygems_version: 2.5.2.3
|
56
59
|
signing_key:
|
57
60
|
specification_version: 4
|
58
61
|
summary: Pusher Chatkit Ruby SDK
|