pusher-chatkit-server 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
@@ -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: []