pusher-chatkit-server 0.1.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 +7 -0
- data/lib/chatkit.rb +1 -0
- data/lib/chatkit/client.rb +284 -0
- data/lib/chatkit/permissions.rb +51 -0
- metadata +60 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 39d00e64807f8797dac5042a02ad1220cca6ae57
|
4
|
+
data.tar.gz: 8f3d02cc7dd79e0fa4f5eafe45418fcb2db5b9b9
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: ef7029a8b9259ed8aeee7d81690dd7a57560c5aef2bfc71946a1433582ad75348beac2b40f3fbbd0a445e90201ac88413886b2191f1e2f7933a26be3eee4cd45
|
7
|
+
data.tar.gz: 2fa2f7bb255c86621065c8690430d709b6c65bf57464b87546c6be2d8207448436fe4ed26c35206e68b1f9178d64e11c8fb7ac96a1f7aaac033245883240b01d
|
data/lib/chatkit.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require_relative 'chatkit/client'
|
@@ -0,0 +1,284 @@
|
|
1
|
+
require 'pusher-platform'
|
2
|
+
require 'json'
|
3
|
+
require_relative './permissions'
|
4
|
+
|
5
|
+
module Chatkit
|
6
|
+
|
7
|
+
class Error < RuntimeError
|
8
|
+
end
|
9
|
+
|
10
|
+
class Client
|
11
|
+
attr_accessor :api_instance, :authorizer_instance
|
12
|
+
|
13
|
+
def initialize(options)
|
14
|
+
base_options = {
|
15
|
+
instance: options[:instance],
|
16
|
+
key: options[:key],
|
17
|
+
port: options[:port],
|
18
|
+
host: options[:host],
|
19
|
+
client: options[:client]
|
20
|
+
}
|
21
|
+
|
22
|
+
@api_instance = Pusher::Instance.new(
|
23
|
+
base_options.merge!({
|
24
|
+
service_name: 'chatkit',
|
25
|
+
service_version: 'v1'
|
26
|
+
})
|
27
|
+
)
|
28
|
+
|
29
|
+
@authorizer_instance = Pusher::Instance.new(
|
30
|
+
base_options.merge!({
|
31
|
+
service_name: 'chatkit_authorizer',
|
32
|
+
service_version: 'v1'
|
33
|
+
})
|
34
|
+
)
|
35
|
+
end
|
36
|
+
|
37
|
+
def authenticate(request, options)
|
38
|
+
@api_instance.authenticate(request, options)
|
39
|
+
end
|
40
|
+
|
41
|
+
def generate_access_token(options)
|
42
|
+
@api_instance.generate_access_token(options)
|
43
|
+
end
|
44
|
+
|
45
|
+
# User API
|
46
|
+
|
47
|
+
def create_user(id, name, avatar_url, custom_data)
|
48
|
+
body = {
|
49
|
+
id: id,
|
50
|
+
name: name
|
51
|
+
}
|
52
|
+
|
53
|
+
unless avatar_url.nil?
|
54
|
+
body[:avatar_url] = avatar_url
|
55
|
+
end
|
56
|
+
|
57
|
+
unless custom_data.nil?
|
58
|
+
body[:custom_data] = custom_data
|
59
|
+
end
|
60
|
+
|
61
|
+
@api_instance.request(
|
62
|
+
method: "POST",
|
63
|
+
path: "/users",
|
64
|
+
headers: {
|
65
|
+
"Content-Type": "application/json",
|
66
|
+
},
|
67
|
+
body: body,
|
68
|
+
jwt: generate_access_token(user_id: id, su: true)
|
69
|
+
)
|
70
|
+
end
|
71
|
+
|
72
|
+
def delete_user(id)
|
73
|
+
@api_instance.request(
|
74
|
+
method: "DELETE",
|
75
|
+
path: "/users/#{id}",
|
76
|
+
jwt: generate_access_token(user_id: id, su: true)
|
77
|
+
)
|
78
|
+
end
|
79
|
+
|
80
|
+
def get_users(from_id)
|
81
|
+
request_options = {
|
82
|
+
method: "GET",
|
83
|
+
path: "/users",
|
84
|
+
jwt: generate_access_token(su: true)
|
85
|
+
}
|
86
|
+
|
87
|
+
unless from_id == nil && from_id == ""
|
88
|
+
request_options.merge!({ query: { from_id: from_id }})
|
89
|
+
end
|
90
|
+
|
91
|
+
@api_instance.request(request_options)
|
92
|
+
end
|
93
|
+
|
94
|
+
def get_users_by_ids(user_ids)
|
95
|
+
@api_instance.request(
|
96
|
+
method: "GET",
|
97
|
+
path: "/users_by_ids",
|
98
|
+
query: {
|
99
|
+
user_ids: user_ids.join(",")
|
100
|
+
},
|
101
|
+
jwt: generate_access_token(su: true)
|
102
|
+
)
|
103
|
+
end
|
104
|
+
|
105
|
+
# Room API
|
106
|
+
|
107
|
+
def get_room(room_id)
|
108
|
+
@api_instance.request(
|
109
|
+
method: "GET",
|
110
|
+
path: "/rooms/#{room_id}",
|
111
|
+
jwt: generate_access_token(su: true)
|
112
|
+
)
|
113
|
+
end
|
114
|
+
|
115
|
+
def get_room_messages(room_id, initial_id, direction, limit)
|
116
|
+
query_params = {}
|
117
|
+
|
118
|
+
query_params[:initial_id] = initial_id unless initial_id.nil?
|
119
|
+
query_params[:direction] = direction unless direction.nil?
|
120
|
+
query_params[:limit] = limit unless limit.nil?
|
121
|
+
|
122
|
+
@api_instance.request(
|
123
|
+
method: "GET",
|
124
|
+
path: "/rooms/#{room_id}/messages",
|
125
|
+
query: query_params,
|
126
|
+
jwt: @api_instance.generate_access_token(su: true)
|
127
|
+
)
|
128
|
+
end
|
129
|
+
|
130
|
+
def get_rooms(from_id)
|
131
|
+
request_options = {
|
132
|
+
method: "GET",
|
133
|
+
path: "/rooms",
|
134
|
+
jwt: @api_instance.generate_access_token(su: true)
|
135
|
+
}
|
136
|
+
|
137
|
+
unless from_id == nil && from_id == ""
|
138
|
+
request_options.merge!({ query: { from_id: from_id }})
|
139
|
+
end
|
140
|
+
|
141
|
+
@api_instance.request(request_options)
|
142
|
+
end
|
143
|
+
|
144
|
+
# Authorizer API
|
145
|
+
|
146
|
+
def create_room_role(name, permissions)
|
147
|
+
create_role(name, ROOM_SCOPE, permissions)
|
148
|
+
end
|
149
|
+
|
150
|
+
def create_global_role(name, permissions)
|
151
|
+
create_role(name, GLOBAL_SCOPE, permissions)
|
152
|
+
end
|
153
|
+
|
154
|
+
def delete_room_role(role_name)
|
155
|
+
delete_role(role_name, ROOM_SCOPE)
|
156
|
+
end
|
157
|
+
|
158
|
+
def delete_global_role(role_name)
|
159
|
+
delete_role(role_name, GLOBAL_SCOPE)
|
160
|
+
end
|
161
|
+
|
162
|
+
def assign_global_role_to_user(user_id, role_name)
|
163
|
+
assign_role_to_user(user_id, role_name, nil)
|
164
|
+
end
|
165
|
+
|
166
|
+
def assign_room_role_to_user(user_id, role_name, room_id)
|
167
|
+
assign_role_to_user(user_id, role_name, room_id)
|
168
|
+
end
|
169
|
+
|
170
|
+
def get_roles
|
171
|
+
resp = @authorizer_instance.request(
|
172
|
+
method: "GET",
|
173
|
+
path: "/roles",
|
174
|
+
jwt: generate_access_token(su: true)
|
175
|
+
)
|
176
|
+
|
177
|
+
JSON.parse(resp.body)
|
178
|
+
end
|
179
|
+
|
180
|
+
def get_user_roles(user_id)
|
181
|
+
resp = @authorizer_instance.request(
|
182
|
+
method: "GET",
|
183
|
+
path: "/users/#{user_id}/roles",
|
184
|
+
jwt: generate_access_token(su: true)
|
185
|
+
)
|
186
|
+
|
187
|
+
JSON.parse(resp.body)
|
188
|
+
end
|
189
|
+
|
190
|
+
def remove_global_role_for_user(user_id)
|
191
|
+
remove_role_for_user(user_id, nil)
|
192
|
+
end
|
193
|
+
|
194
|
+
def remove_room_role_for_user(user_id, room_id)
|
195
|
+
remove_role_for_user(user_id, room_id)
|
196
|
+
end
|
197
|
+
|
198
|
+
def get_permissions_for_global_role(role_name)
|
199
|
+
get_permissions_for_role(role_name, GLOBAL_SCOPE)
|
200
|
+
end
|
201
|
+
|
202
|
+
def get_permissions_for_room_role(role_name)
|
203
|
+
get_permissions_for_role(role_name, ROOM_SCOPE)
|
204
|
+
end
|
205
|
+
|
206
|
+
private
|
207
|
+
|
208
|
+
def create_role(name, scope, permissions)
|
209
|
+
permissions.each do |permission|
|
210
|
+
unless VALID_PERMISSIONS[scope.to_sym].include?(permission)
|
211
|
+
raise Chatkit::Error.new("Permission value #{permission} is invalid")
|
212
|
+
end
|
213
|
+
end
|
214
|
+
|
215
|
+
@authorizer_instance.request(
|
216
|
+
method: "POST",
|
217
|
+
path: "/roles",
|
218
|
+
headers: {
|
219
|
+
"Content-Type": "application/json"
|
220
|
+
},
|
221
|
+
body: {
|
222
|
+
scope: scope,
|
223
|
+
name: name,
|
224
|
+
permissions: permissions,
|
225
|
+
},
|
226
|
+
jwt: generate_access_token(su: true)
|
227
|
+
)
|
228
|
+
end
|
229
|
+
|
230
|
+
def delete_role(role_name, scope)
|
231
|
+
@authorizer_instance.request(
|
232
|
+
method: "DELETE",
|
233
|
+
path: "/roles/#{role_name}/scope/#{scope}",
|
234
|
+
jwt: generate_access_token(su: true)
|
235
|
+
)
|
236
|
+
end
|
237
|
+
|
238
|
+
def assign_role_to_user(user_id, role_name, room_id)
|
239
|
+
body = { name: role_name }
|
240
|
+
|
241
|
+
unless room_id.nil?
|
242
|
+
body.merge!(room_id: room_id)
|
243
|
+
end
|
244
|
+
|
245
|
+
@authorizer_instance.request(
|
246
|
+
method: "POST",
|
247
|
+
path: "/users/#{user_id}/roles",
|
248
|
+
headers: {
|
249
|
+
"Content-Type": "application/json",
|
250
|
+
},
|
251
|
+
body: body,
|
252
|
+
jwt: generate_access_token(su: true)
|
253
|
+
)
|
254
|
+
end
|
255
|
+
|
256
|
+
def remove_role_for_user(user_id, room_id)
|
257
|
+
options = {
|
258
|
+
method: "PUT",
|
259
|
+
path: "/users/#{user_id}/roles",
|
260
|
+
headers: {
|
261
|
+
"Content-Type": "application/json",
|
262
|
+
},
|
263
|
+
body: {},
|
264
|
+
jwt: generate_access_token(su: true)
|
265
|
+
}
|
266
|
+
|
267
|
+
unless room_id.nil?
|
268
|
+
options.merge!(body: { room_id: room_id })
|
269
|
+
end
|
270
|
+
|
271
|
+
@authorizer_instance.request(options)
|
272
|
+
end
|
273
|
+
|
274
|
+
def get_permissions_for_role(role_name, scope)
|
275
|
+
resp = @authorizer_instance.request(
|
276
|
+
method: "GET",
|
277
|
+
path: "/roles/#{role_name}/scope/#{scope}/permissions",
|
278
|
+
jwt: generate_access_token(su: true)
|
279
|
+
)
|
280
|
+
|
281
|
+
JSON.parse(resp.body)
|
282
|
+
end
|
283
|
+
end
|
284
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module Chatkit
|
2
|
+
ROOM_SCOPE = "room"
|
3
|
+
GLOBAL_SCOPE = "global"
|
4
|
+
|
5
|
+
JOIN_ROOM = "join_room"
|
6
|
+
LEAVE_ROOM = "leave_room"
|
7
|
+
ADD_ROOM_MEMBER = "add_room_member"
|
8
|
+
REMOVE_ROOM_MEMBER = "remove_room_member"
|
9
|
+
CREATE_ROOM = "create_room"
|
10
|
+
DELETE_ROOM = "delete_room"
|
11
|
+
UPDATE_ROOM = "update_room"
|
12
|
+
ADD_MESSAGE = "add_message"
|
13
|
+
CREATE_TYPING_EVENT = "create_typing_event"
|
14
|
+
SUBSCRIBE_PRESENCE = "subscribe_presence"
|
15
|
+
UPDATE_USER = "update_user"
|
16
|
+
GET_ROOM_MESSAGES = "get_room_messages"
|
17
|
+
GET_USER = "get_user"
|
18
|
+
GET_ROOM = "get_room"
|
19
|
+
GET_USER_ROOMS = "get_user_rooms"
|
20
|
+
|
21
|
+
VALID_PERMISSIONS = {
|
22
|
+
room: [
|
23
|
+
JOIN_ROOM,
|
24
|
+
LEAVE_ROOM,
|
25
|
+
ADD_ROOM_MEMBER,
|
26
|
+
REMOVE_ROOM_MEMBER,
|
27
|
+
DELETE_ROOM,
|
28
|
+
UPDATE_ROOM,
|
29
|
+
ADD_MESSAGE,
|
30
|
+
CREATE_TYPING_EVENT,
|
31
|
+
GET_ROOM_MESSAGES,
|
32
|
+
],
|
33
|
+
global: [
|
34
|
+
JOIN_ROOM,
|
35
|
+
LEAVE_ROOM,
|
36
|
+
ADD_ROOM_MEMBER,
|
37
|
+
REMOVE_ROOM_MEMBER,
|
38
|
+
CREATE_ROOM,
|
39
|
+
DELETE_ROOM,
|
40
|
+
UPDATE_ROOM,
|
41
|
+
ADD_MESSAGE,
|
42
|
+
CREATE_TYPING_EVENT,
|
43
|
+
SUBSCRIBE_PRESENCE,
|
44
|
+
UPDATE_USER,
|
45
|
+
GET_ROOM_MESSAGES,
|
46
|
+
GET_USER,
|
47
|
+
GET_ROOM,
|
48
|
+
GET_USER_ROOMS,
|
49
|
+
]
|
50
|
+
}
|
51
|
+
end
|
metadata
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: pusher-chatkit-server
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Pusher
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-08-31 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: pusher-platform
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.4.3
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.4.3
|
27
|
+
description:
|
28
|
+
email: support@pusher.com
|
29
|
+
executables: []
|
30
|
+
extensions: []
|
31
|
+
extra_rdoc_files: []
|
32
|
+
files:
|
33
|
+
- lib/chatkit.rb
|
34
|
+
- lib/chatkit/client.rb
|
35
|
+
- lib/chatkit/permissions.rb
|
36
|
+
homepage:
|
37
|
+
licenses:
|
38
|
+
- MIT
|
39
|
+
metadata: {}
|
40
|
+
post_install_message:
|
41
|
+
rdoc_options: []
|
42
|
+
require_paths:
|
43
|
+
- lib
|
44
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - ">="
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '0'
|
49
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
requirements: []
|
55
|
+
rubyforge_project:
|
56
|
+
rubygems_version: 2.6.12
|
57
|
+
signing_key:
|
58
|
+
specification_version: 4
|
59
|
+
summary: Pusher Chatkit Ruby SDK
|
60
|
+
test_files: []
|