mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-02-09 04:43:54 -05:00
At the moment you have to wait for whoever you’ve invited to accept the invitation before you can go live. Since this check is mainly for the benefit of the service, not us, we should trust that people’s intentions are good when they invite someone. So this commit also checks the invited users when counting how many team members a service has.
75 lines
2.6 KiB
Python
75 lines
2.6 KiB
Python
from app.models.user import (
|
|
InvitedUser,
|
|
roles,
|
|
translate_permissions_from_admin_roles_to_db,
|
|
)
|
|
from app.notify_client import NotifyAdminAPIClient, _attach_current_user, cache
|
|
|
|
|
|
class InviteApiClient(NotifyAdminAPIClient):
|
|
|
|
def init_app(self, app):
|
|
super().init_app(app)
|
|
|
|
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': str(service_id),
|
|
'email_address': email_address,
|
|
'from_user': invite_from_id,
|
|
'permissions': ','.join(sorted(translate_permissions_from_admin_roles_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='/service/{}/invite'.format(service_id), data=data)
|
|
return InvitedUser(**resp['data'])
|
|
|
|
def get_invites_for_service(self, service_id):
|
|
return [
|
|
InvitedUser(**invite)
|
|
for invite in self._get_invites_for_service(service_id)
|
|
if invite['status'] != 'accepted'
|
|
]
|
|
|
|
def _get_invites_for_service(self, service_id):
|
|
return self.get(
|
|
'/service/{}/invite'.format(service_id)
|
|
)['data']
|
|
|
|
def get_count_of_invites_with_permission(self, service_id, permission):
|
|
if permission not in roles.keys():
|
|
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)
|
|
])
|
|
|
|
def check_token(self, token):
|
|
resp = self.get(url='/invite/service/{}'.format(token))
|
|
return InvitedUser(**resp['data'])
|
|
|
|
def cancel_invited_user(self, service_id, invited_user_id):
|
|
data = {'status': 'cancelled'}
|
|
data = _attach_current_user(data)
|
|
self.post(url='/service/{0}/invite/{1}'.format(service_id, 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='/service/{0}/invite/{1}'.format(service_id, invited_user_id),
|
|
data=data)
|
|
|
|
|
|
invite_api_client = InviteApiClient()
|