Skip to content

Commit b861578

Browse files
authored
Add custom permission/rotes (#56)
1 parent a70ddae commit b861578

File tree

5 files changed

+289
-1
lines changed

5 files changed

+289
-1
lines changed

stream_chat/async_chat/client.py

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -360,6 +360,67 @@ async def check_sqs(self, sqs_key=None, sqs_secret=None, sqs_url=None):
360360
data = {"sqs_key": sqs_key, "sqs_secret": sqs_secret, "sqs_url": sqs_url}
361361
return await self.post("check_sqs", data=data)
362362

363+
async def get_permission(self, name):
364+
"""
365+
Get the definition for a permission
366+
367+
:param name: Name of the permission
368+
"""
369+
return await self.get(f"custom_permission/{name}")
370+
371+
async def create_permission(self, permission):
372+
"""
373+
Create a custom permission
374+
375+
:param permission: Definition of the permission
376+
"""
377+
return await self.post("custom_permission", data=permission)
378+
379+
async def update_permission(self, name, permission):
380+
"""
381+
Update a custom permission
382+
383+
:param name: Name of the permission
384+
:param permission: New definition of the permission
385+
"""
386+
return await self.post(f"custom_permission/{name}", data=permission)
387+
388+
async def delete_permission(self, name):
389+
"""
390+
Delete a custom permission
391+
392+
:param name: Name of the permission
393+
"""
394+
return await self.delete(f"custom_permission/{name}")
395+
396+
async def list_permissions(self):
397+
"""
398+
List custom permissions of the app
399+
"""
400+
return await self.get("custom_permission")
401+
402+
async def create_role(self, name):
403+
"""
404+
Create a custom role
405+
406+
:param name: Name of the role
407+
"""
408+
return await self.post("custom_role", data={"name": name})
409+
410+
async def delete_role(self, name):
411+
"""
412+
Delete a custom role
413+
414+
:param name: Name of the role
415+
"""
416+
return await self.delete(f"custom_role/{name}")
417+
418+
async def list_roles(self):
419+
"""
420+
List custom roles of the app
421+
"""
422+
return await self.get("custom_role")
423+
363424
async def close(self):
364425
await self.session.close()
365426

stream_chat/base/client.py

Lines changed: 70 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -318,7 +318,7 @@ def delete_blocklist(self, name):
318318
pass
319319

320320
@abc.abstractmethod
321-
async def check_sqs(self, sqs_key=None, sqs_secret=None, sqs_url=None):
321+
def check_sqs(self, sqs_key=None, sqs_secret=None, sqs_url=None):
322322
"""
323323
Check SQS Push settings
324324
@@ -330,3 +330,72 @@ async def check_sqs(self, sqs_key=None, sqs_secret=None, sqs_url=None):
330330
:return:
331331
"""
332332
pass
333+
334+
@abc.abstractmethod
335+
def get_permission(self, name):
336+
"""
337+
Get the definition for a permission
338+
339+
:param name: Name of the permission
340+
"""
341+
pass
342+
343+
@abc.abstractmethod
344+
def create_permission(self, permission):
345+
"""
346+
Create a custom permission
347+
348+
:param permission: Definition of the permission
349+
"""
350+
pass
351+
352+
@abc.abstractmethod
353+
def update_permission(self, name, permission):
354+
"""
355+
Update a custom permission
356+
357+
:param name: Name of the permission
358+
:param permission: New definition of the permission
359+
"""
360+
pass
361+
362+
@abc.abstractmethod
363+
def delete_permission(self, name):
364+
"""
365+
Delete a custom permission
366+
367+
:param name: Name of the permission
368+
"""
369+
pass
370+
371+
@abc.abstractmethod
372+
def list_permissions(self):
373+
"""
374+
List custom permissions of the app
375+
"""
376+
pass
377+
378+
@abc.abstractmethod
379+
def create_role(self, name):
380+
"""
381+
Create a custom role
382+
383+
:param name: Name of the role
384+
"""
385+
pass
386+
387+
@abc.abstractmethod
388+
def delete_role(self, name):
389+
"""
390+
Delete a custom role
391+
392+
:param name: Name of the role
393+
"""
394+
pass
395+
396+
@abc.abstractmethod
397+
def list_roles(self):
398+
"""
399+
List custom roles of the app
400+
"""
401+
pass

stream_chat/client.py

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -347,3 +347,64 @@ def check_sqs(self, sqs_key=None, sqs_secret=None, sqs_url=None):
347347
"""
348348
data = {"sqs_key": sqs_key, "sqs_secret": sqs_secret, "sqs_url": sqs_url}
349349
return self.post("check_sqs", data=data)
350+
351+
def get_permission(self, name):
352+
"""
353+
Get the definition for a permission
354+
355+
:param name: Name of the permission
356+
"""
357+
return self.get(f"custom_permission/{name}")
358+
359+
def create_permission(self, permission):
360+
"""
361+
Create a custom permission
362+
363+
:param permission: Definition of the permission
364+
"""
365+
return self.post("custom_permission", data=permission)
366+
367+
def update_permission(self, name, permission):
368+
"""
369+
Update a custom permission
370+
371+
:param name: Name of the permission
372+
:param permission: New definition of the permission
373+
"""
374+
return self.post(f"custom_permission/{name}", data=permission)
375+
376+
def delete_permission(self, name):
377+
"""
378+
Delete a custom permission
379+
380+
:param name: Name of the permission
381+
"""
382+
return self.delete(f"custom_permission/{name}")
383+
384+
def list_permissions(self):
385+
"""
386+
List custom permissions of the app
387+
"""
388+
return self.get("custom_permission")
389+
390+
def create_role(self, name):
391+
"""
392+
Create a custom role
393+
394+
:param name: Name of the role
395+
"""
396+
return self.post("custom_role", data={"name": name})
397+
398+
def delete_role(self, name):
399+
"""
400+
Delete a custom role
401+
402+
:param name: Name of the role
403+
"""
404+
return self.delete(f"custom_role/{name}")
405+
406+
def list_roles(self):
407+
"""
408+
List custom roles of the app
409+
"""
410+
return self.get("custom_role")

stream_chat/tests/async_chat/test_client.py

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -330,3 +330,52 @@ async def test_check_sqs(self, client):
330330
response = await client.check_sqs("key", "secret", "https://foo.com/bar")
331331
assert response["status"] == "error"
332332
assert "invalid SQS url" in response["error"]
333+
334+
@pytest.mark.asyncio
335+
async def test_custom_permission_and_roles(self, client):
336+
name, role = "Something restricted", "god"
337+
338+
try:
339+
client.delete_permission(name)
340+
client.delete_role(role)
341+
except: # noqa
342+
pass
343+
344+
custom = {
345+
"name": name,
346+
"resource": "DeleteChannel",
347+
"owner": False,
348+
"same_team": True,
349+
}
350+
351+
await client.create_permission(custom)
352+
response = await client.get_permission(name)
353+
print(response)
354+
assert response["permission"]["name"] == name
355+
assert response["permission"]["custom"]
356+
assert not response["permission"]["owner"]
357+
assert response["permission"]["resource"] == custom["resource"]
358+
359+
custom["owner"] = True
360+
await client.update_permission(name, custom)
361+
362+
response = await client.get_permission(name)
363+
print(response)
364+
assert response["permission"]["name"] == name
365+
assert response["permission"]["custom"]
366+
assert response["permission"]["owner"]
367+
assert response["permission"]["resource"] == custom["resource"]
368+
369+
response = await client.list_permissions()
370+
assert len(response["permissions"]) == 1
371+
assert response["permissions"][0]["name"] == name
372+
await client.delete_permission(name)
373+
response = await client.list_permissions()
374+
assert len(response["permissions"]) == 0
375+
376+
await client.create_role(role)
377+
response = await client.list_roles()
378+
assert role in response["roles"]
379+
await client.delete_role(role)
380+
response = await client.list_roles()
381+
assert role not in response["roles"]

stream_chat/tests/test_client.py

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,3 +270,51 @@ def test_check_sqs(self, client):
270270
response = client.check_sqs("key", "secret", "https://foo.com/bar")
271271
assert response["status"] == "error"
272272
assert "invalid SQS url" in response["error"]
273+
274+
def test_custom_permission_and_roles(self, client):
275+
name, role = "Something restricted", "god"
276+
277+
try:
278+
client.delete_permission(name)
279+
client.delete_role(role)
280+
except: # noqa
281+
pass
282+
283+
custom = {
284+
"name": name,
285+
"resource": "DeleteChannel",
286+
"owner": False,
287+
"same_team": True,
288+
}
289+
290+
client.create_permission(custom)
291+
response = client.get_permission(name)
292+
print(response)
293+
assert response["permission"]["name"] == name
294+
assert response["permission"]["custom"]
295+
assert not response["permission"]["owner"]
296+
assert response["permission"]["resource"] == custom["resource"]
297+
298+
custom["owner"] = True
299+
client.update_permission(name, custom)
300+
301+
response = client.get_permission(name)
302+
print(response)
303+
assert response["permission"]["name"] == name
304+
assert response["permission"]["custom"]
305+
assert response["permission"]["owner"]
306+
assert response["permission"]["resource"] == custom["resource"]
307+
308+
response = client.list_permissions()
309+
assert len(response["permissions"]) == 1
310+
assert response["permissions"][0]["name"] == name
311+
client.delete_permission(name)
312+
response = client.list_permissions()
313+
assert len(response["permissions"]) == 0
314+
315+
client.create_role(role)
316+
response = client.list_roles()
317+
assert role in response["roles"]
318+
client.delete_role(role)
319+
response = client.list_roles()
320+
assert role not in response["roles"]

0 commit comments

Comments
 (0)