-
Notifications
You must be signed in to change notification settings - Fork 38
Expand file tree
/
Copy pathinvite_api_client.py
More file actions
91 lines (74 loc) · 3.61 KB
/
invite_api_client.py
File metadata and controls
91 lines (74 loc) · 3.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
from contextvars import ContextVar
from flask import current_app
from notifications_utils.local_vars import LazyLocalGetter
from werkzeug.local import LocalProxy
from app import memo_resetters
from app.notify_client import NotifyAdminAPIClient, _attach_current_user, api_client_request_session, cache
from app.utils.user_permissions import (
all_ui_permissions,
translate_permissions_from_ui_to_db,
)
class InviteApiClient(NotifyAdminAPIClient):
def __init__(self, app, *args, **kwargs):
super().__init__(app, *args, **kwargs)
self.admin_url = app.config["ADMIN_BASE_URL"]
def create_invite(self, invite_from_id, service_id, email_address, permissions, auth_type, folder_permissions):
data = {
"service": service_id,
"email_address": email_address,
"from_user": invite_from_id,
"permissions": ",".join(sorted(translate_permissions_from_ui_to_db(permissions))),
"auth_type": auth_type,
"invite_link_host": self.admin_url,
"folder_permissions": folder_permissions,
}
data = _attach_current_user(data)
resp = self.post(url=f"/service/{service_id}/invite", data=data)
return resp["data"]
def update_invite(self, *, service_id, invite_id, auth_type):
data = {
"auth_type": auth_type,
}
resp = self.post(url=f"/service/{service_id}/invite/{invite_id}", data=data)
return resp["data"]
def request_invite_for(self, *, user_to_invite_id, service_id, service_managers_ids, reason):
data = {
"service_managers_ids": service_managers_ids,
"reason": reason,
"invite_link_host": self.admin_url,
}
self.post(url=f"/service/{service_id}/invite/request-for/{user_to_invite_id}", data=data)
def get_invites_for_service(self, service_id):
return self.get(f"/service/{service_id}/invite")["data"]
def get_invited_user(self, invited_user_id):
return self.get(f"/invite/service/{invited_user_id}")["data"]
def get_invited_user_for_service(self, service_id, invited_user_id):
return self.get(f"/service/{service_id}/invite/{invited_user_id}")["data"]
def get_count_of_invites_with_permission(self, service_id, permission):
if permission not in all_ui_permissions:
raise TypeError(f"{permission} is not a valid permission")
return len(
[
invited_user
for invited_user in self.get_invites_for_service(service_id)
if invited_user.has_permission_for_service(service_id, permission)
]
)
def check_token(self, token):
return self.get(url=f"/invite/service/check/{token}")["data"]
def cancel_invited_user(self, service_id, invited_user_id):
data = {"status": "cancelled"}
data = _attach_current_user(data)
self.post(url=f"/service/{service_id}/invite/{invited_user_id}", data=data)
@cache.delete("service-{service_id}")
@cache.delete("user-{invited_user_id}")
def accept_invite(self, service_id, invited_user_id):
data = {"status": "accepted"}
self.post(url=f"/service/{service_id}/invite/{invited_user_id}", data=data)
_invite_api_client_context_var: ContextVar[InviteApiClient] = ContextVar("invite_api_client")
get_invite_api_client: LazyLocalGetter[InviteApiClient] = LazyLocalGetter(
_invite_api_client_context_var,
lambda: InviteApiClient(current_app, request_session=api_client_request_session),
)
memo_resetters.append(lambda: get_invite_api_client.clear())
invite_api_client = LocalProxy(get_invite_api_client)