2022-09-09 17:02:48 -07:00
|
|
|
from app.notify_client import NotifyAdminAPIClient, _attach_current_user, cache
|
2021-07-22 14:05:11 +01:00
|
|
|
from app.utils.user_permissions import (
|
2021-07-22 14:25:22 +01:00
|
|
|
all_ui_permissions,
|
2021-07-22 14:38:45 +01:00
|
|
|
translate_permissions_from_ui_to_db,
|
2018-02-28 15:37:49 +00:00
|
|
|
)
|
2016-02-26 13:07:35 +00:00
|
|
|
|
|
|
|
|
|
2016-11-30 17:01:44 +00:00
|
|
|
class InviteApiClient(NotifyAdminAPIClient):
|
2016-02-26 13:07:35 +00:00
|
|
|
def init_app(self, app):
|
2018-02-09 15:03:32 +00:00
|
|
|
super().init_app(app)
|
|
|
|
|
|
2023-08-25 09:12:23 -07:00
|
|
|
self.admin_url = app.config["ADMIN_BASE_URL"]
|
2016-02-26 13:07:35 +00:00
|
|
|
|
2023-08-25 09:12:23 -07:00
|
|
|
def create_invite(
|
|
|
|
|
self,
|
|
|
|
|
invite_from_id,
|
|
|
|
|
service_id,
|
|
|
|
|
email_address,
|
|
|
|
|
permissions,
|
|
|
|
|
auth_type,
|
|
|
|
|
folder_permissions,
|
|
|
|
|
):
|
2016-02-26 13:07:35 +00:00
|
|
|
data = {
|
2023-08-25 09:12:23 -07:00
|
|
|
"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,
|
2016-02-26 13:07:35 +00:00
|
|
|
}
|
2016-08-11 14:20:43 +01:00
|
|
|
data = _attach_current_user(data)
|
2023-08-25 09:12:23 -07:00
|
|
|
resp = self.post(url="/service/{}/invite".format(service_id), data=data)
|
|
|
|
|
return resp["data"]
|
2016-02-26 15:33:17 +00:00
|
|
|
|
|
|
|
|
def get_invites_for_service(self, service_id):
|
2023-08-25 09:12:23 -07:00
|
|
|
return self.get("/service/{}/invite".format(service_id))["data"]
|
2016-02-29 17:35:21 +00:00
|
|
|
|
2021-03-08 12:51:35 +00:00
|
|
|
def get_invited_user(self, invited_user_id):
|
2023-08-25 09:12:23 -07:00
|
|
|
return self.get(f"/invite/service/{invited_user_id}")["data"]
|
2021-03-08 12:51:35 +00:00
|
|
|
|
2021-03-05 17:04:35 +00:00
|
|
|
def get_invited_user_for_service(self, service_id, invited_user_id):
|
2023-08-25 09:12:23 -07:00
|
|
|
return self.get(f"/service/{service_id}/invite/{invited_user_id}")["data"]
|
2020-08-17 14:30:09 +01:00
|
|
|
|
2019-04-11 16:40:25 +01:00
|
|
|
def get_count_of_invites_with_permission(self, service_id, permission):
|
2021-07-22 14:25:22 +01:00
|
|
|
if permission not in all_ui_permissions:
|
2023-08-25 09:12:23 -07:00
|
|
|
raise TypeError("{} is not a valid permission".format(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)
|
|
|
|
|
]
|
|
|
|
|
)
|
2019-04-11 16:40:25 +01:00
|
|
|
|
2016-03-03 17:53:16 +00:00
|
|
|
def check_token(self, token):
|
2023-08-25 09:12:23 -07:00
|
|
|
return self.get(url="/invite/service/check/{}".format(token))["data"]
|
2016-03-01 16:12:26 +00:00
|
|
|
|
|
|
|
|
def cancel_invited_user(self, service_id, invited_user_id):
|
2023-08-25 09:12:23 -07:00
|
|
|
data = {"status": "cancelled"}
|
2016-08-11 14:20:43 +01:00
|
|
|
data = _attach_current_user(data)
|
2023-08-25 09:12:23 -07:00
|
|
|
self.post(
|
|
|
|
|
url="/service/{0}/invite/{1}".format(service_id, invited_user_id), data=data
|
|
|
|
|
)
|
2016-02-29 17:35:21 +00:00
|
|
|
|
2023-08-25 09:12:23 -07:00
|
|
|
@cache.delete("service-{service_id}")
|
|
|
|
|
@cache.delete("user-{invited_user_id}")
|
2016-03-03 17:53:16 +00:00
|
|
|
def accept_invite(self, service_id, invited_user_id):
|
2023-08-25 09:12:23 -07:00
|
|
|
data = {"status": "accepted"}
|
|
|
|
|
self.post(
|
|
|
|
|
url="/service/{0}/invite/{1}".format(service_id, invited_user_id), data=data
|
|
|
|
|
)
|
2016-03-03 17:53:16 +00:00
|
|
|
|
2018-10-26 15:39:32 +01:00
|
|
|
|
|
|
|
|
invite_api_client = InviteApiClient()
|