mirror of
https://github.com/GSA/notifications-admin.git
synced 2025-12-14 17:13:25 -05:00
`@cache.delete('user', 'user_id')` is easier to read and understand than
`@cache.delete('user', key_from_args=[1])`. This will become even more
apparent if we have to start doing stuff like `key_from_args=[1, 5]`,
which is a lot more opaque than just saying
`'service_id', 'template_id'`.
It does make the implementation a bit more complex, but I’m not too
worried about that because:
- the tests are solid
- it’s nicely encapsulated
60 lines
2.2 KiB
Python
60 lines
2.2 KiB
Python
from app.notify_client import NotifyAdminAPIClient, _attach_current_user, cache
|
|
from app.notify_client.models import (
|
|
InvitedUser,
|
|
translate_permissions_from_admin_roles_to_db,
|
|
)
|
|
|
|
|
|
class InviteApiClient(NotifyAdminAPIClient):
|
|
def __init__(self):
|
|
super().__init__("a" * 73, "b")
|
|
|
|
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):
|
|
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,
|
|
}
|
|
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):
|
|
endpoint = '/service/{}/invite'.format(service_id)
|
|
resp = self.get(endpoint)
|
|
invites = resp['data']
|
|
invited_users = self._get_invited_users(invites)
|
|
return invited_users
|
|
|
|
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)
|
|
|
|
def _get_invited_users(self, invites):
|
|
invited_users = []
|
|
for invite in invites:
|
|
invited_user = InvitedUser(**invite)
|
|
invited_users.append(invited_user)
|
|
return invited_users
|