2018-10-26 15:58:44 +01:00
|
|
|
from app.models.user import (
|
2018-02-28 15:37:49 +00:00
|
|
|
InvitedUser,
|
|
|
|
|
translate_permissions_from_admin_roles_to_db,
|
|
|
|
|
)
|
2018-10-26 15:58:44 +01:00
|
|
|
from app.notify_client import NotifyAdminAPIClient, _attach_current_user, cache
|
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)
|
|
|
|
|
|
2017-12-20 17:17:17 +00:00
|
|
|
self.admin_url = app.config['ADMIN_BASE_URL']
|
2016-02-26 13:07:35 +00:00
|
|
|
|
2019-03-15 14:57:39 +00: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 = {
|
|
|
|
|
'service': str(service_id),
|
|
|
|
|
'email_address': email_address,
|
2016-02-29 11:03:35 +00:00
|
|
|
'from_user': invite_from_id,
|
2018-02-28 15:37:49 +00:00
|
|
|
'permissions': ','.join(sorted(translate_permissions_from_admin_roles_to_db(permissions))),
|
2017-12-20 17:17:17 +00:00
|
|
|
'auth_type': auth_type,
|
|
|
|
|
'invite_link_host': self.admin_url,
|
2019-03-15 14:57:39 +00:00
|
|
|
'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)
|
2016-02-26 13:07:35 +00:00
|
|
|
resp = self.post(url='/service/{}/invite'.format(service_id), data=data)
|
2016-02-29 17:35:21 +00:00
|
|
|
return InvitedUser(**resp['data'])
|
2016-02-26 15:33:17 +00:00
|
|
|
|
|
|
|
|
def get_invites_for_service(self, service_id):
|
2018-11-30 17:39:39 +00:00
|
|
|
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']
|
2016-02-29 17:35:21 +00:00
|
|
|
|
2016-03-03 17:53:16 +00:00
|
|
|
def check_token(self, token):
|
2018-02-26 11:50:40 +00:00
|
|
|
resp = self.get(url='/invite/service/{}'.format(token))
|
2016-02-29 17:35:21 +00:00
|
|
|
return InvitedUser(**resp['data'])
|
2016-03-01 16:12:26 +00:00
|
|
|
|
|
|
|
|
def cancel_invited_user(self, service_id, invited_user_id):
|
|
|
|
|
data = {'status': 'cancelled'}
|
2016-08-11 14:20:43 +01:00
|
|
|
data = _attach_current_user(data)
|
2016-03-01 17:56:39 +00:00
|
|
|
self.post(url='/service/{0}/invite/{1}'.format(service_id, invited_user_id),
|
|
|
|
|
data=data)
|
2016-02-29 17:35:21 +00:00
|
|
|
|
2018-04-20 16:32:02 +01: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):
|
|
|
|
|
data = {'status': 'accepted'}
|
|
|
|
|
self.post(url='/service/{0}/invite/{1}'.format(service_id, invited_user_id),
|
|
|
|
|
data=data)
|
|
|
|
|
|
2018-10-26 15:39:32 +01:00
|
|
|
|
|
|
|
|
invite_api_client = InviteApiClient()
|