Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
TT-112 feat: support role field as list
  • Loading branch information
Angeluz-07 committed Jan 12, 2021
commit 76f90cbe454984080d9f281cc8bdcd1e8f4e999a
11 changes: 10 additions & 1 deletion time_tracker_api/users/users_namespace.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,15 @@
description='Role assigned to the user by the tenant',
example=Faker().word(['time-tracker-admin']),
),
'roles': fields.List(
fields.String(
title='Roles',
description='List of the roles assigned to the user by the tenant',
),
example=Faker().words(
3, ['time-tracker-admin', 'test-user', 'guest',],
),
),
},
)

Expand All @@ -57,7 +66,7 @@ class Users(Resource):
@ns.marshal_list_with(user_response_fields)
def get(self):
"""List all users"""
return AzureConnection().users()
return AzureConnection().users_v2()


@ns.route('/<string:id>/roles')
Expand Down
46 changes: 44 additions & 2 deletions utils/azure_users.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,14 @@ def __init__(self, id, name, email, role):
self.role = role


class AzureUser_v2:
def __init__(self, id, name, email, roles):
self.id = id
self.name = name
self.email = email
self.roles = roles


HTTP_PATCH_HEADERS = {
'Content-type': 'application/json',
'Accept': 'application/json',
Expand All @@ -55,7 +63,10 @@ def __init__(self, id, name, email, role):
'extension_1d76efa96f604499acc0c0ee116a1453_role',
'time_tracker_admin',
),
'test': ('waitforrealvalue', 'waitforrealvalue'),
'test': (
'extension_1d76efa96f604499acc0c0ee116a1453_role_test',
'time_tracker_tester',
),
}


Expand Down Expand Up @@ -91,6 +102,22 @@ def users(self) -> List[AzureUser]:
assert 'value' in response.json()
return [self.to_azure_user(item) for item in response.json()['value']]

def users_v2(self) -> List[AzureUser]:
role_fields_params = ','.join(
[field_name for field_name, _ in ROLE_FIELD_VALUES.values()]
)
endpoint = "{endpoint}/users?api-version=1.6&$select=displayName,otherMails,objectId,{role_fields_params}".format(
endpoint=self.config.ENDPOINT,
role_fields_params=role_fields_params,
)
response = requests.get(endpoint, auth=BearerAuth(self.access_token))

assert 200 == response.status_code
assert 'value' in response.json()
return [
self.to_azure_user_v2(item) for item in response.json()['value']
]

def update_user_role(self, id, role):
endpoint = "{endpoint}/users/{user_id}?api-version=1.6".format(
endpoint=self.config.ENDPOINT, user_id=id
Expand Down Expand Up @@ -119,6 +146,21 @@ def to_azure_user(self, item) -> AzureUser:
role = item[self.role_field] if there_is_role else None
return AzureUser(id, name, email, role)

def to_azure_user_v2(self, item) -> AzureUser:
there_is_email = len(item['otherMails']) > 0

id = item['objectId']
name = item['displayName']
email = item['otherMails'][0] if there_is_email else ''
roles = []
for role_id in ROLE_FIELD_VALUES.keys():
field_name, _ = ROLE_FIELD_VALUES[role_id]
if field_name in item:
field_value = item[field_name]
roles.append(field_value)

return AzureUser_v2(id, name, email, roles)

def update_role(self, user_id, role_id, is_grant):
endpoint = "{endpoint}/users/{user_id}?api-version=1.6".format(
endpoint=self.config.ENDPOINT, user_id=user_id
Expand All @@ -136,7 +178,7 @@ def update_role(self, user_id, role_id, is_grant):
response = requests.get(endpoint, auth=BearerAuth(self.access_token))
assert 200 == response.status_code

return self.to_azure_user(response.json())
return self.to_azure_user_v2(response.json())

def get_role_data(self, role_id, is_grant=True):
assert role_id in ROLE_FIELD_VALUES.keys()
Expand Down