-
Notifications
You must be signed in to change notification settings - Fork 20
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[WIFI-6916] Write Ananda API wrapper script to add and remove users f…
…rom groups (#392) * Add Ananda API wrapper Signed-off-by: Johann Hoffmann <[email protected]> * Add short usage description Signed-off-by: Johann Hoffmann <[email protected]> * Add requirements.txt and change error handling Signed-off-by: Johann Hoffmann <[email protected]>
- Loading branch information
Showing
2 changed files
with
149 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,148 @@ | ||
#!/usr/bin/env python | ||
|
||
import json | ||
import requests | ||
import argparse | ||
|
||
ananda_api = 'https://api.ananda.net' | ||
|
||
|
||
def get_bearer_token(): | ||
authHeader = {"Authorization": args.token} | ||
r = requests.post( | ||
f'{ananda_api}/login-accounts/v1.2/auths/apis/oauth/token', | ||
headers=authHeader) | ||
|
||
try: | ||
org_id = r.json()['meta']['orgId'] | ||
token = r.json()['access_token'] | ||
except Exception: | ||
print('Error: could not get bearer token.') | ||
exit(1) | ||
|
||
return org_id, token | ||
|
||
|
||
def logout(): | ||
authHeader = {"Authorization": f"Bearer {token}"} | ||
r = requests.get( | ||
f'{ananda_api}/login-accounts/v1.2/auths/logout', | ||
headers=authHeader) | ||
|
||
|
||
def get_user_id(): | ||
authHeader = {"Authorization": f"Bearer {token}"} | ||
r = requests.get( | ||
f'{ananda_api}/manage-accounts/v1.2/api/orgs/{org_id}/users', | ||
headers=authHeader) | ||
|
||
try: | ||
for key in r.json(): | ||
user_data = key | ||
if user_data['email'] == args.user or user_data['name'] == args.user: | ||
user_id = user_data['userId'] | ||
break | ||
except Exception: | ||
print('Error: user was not found') | ||
exit(1) | ||
|
||
return user_id | ||
|
||
|
||
def get_group_id(): | ||
authHeader = {"Authorization": f"Bearer {token}"} | ||
r = requests.get( | ||
f'{ananda_api}/manage-accounts/v1.2/api/orgs/{org_id}/groups', | ||
headers=authHeader) | ||
|
||
try: | ||
for key in r.json(): | ||
group_data = key | ||
if group_data['name'] == args.group: | ||
group_id = group_data['groupId'] | ||
break | ||
except Exception: | ||
print('Error: group was not found') | ||
exit(1) | ||
|
||
return group_id | ||
|
||
|
||
def get_user_groups(): | ||
user_id = get_user_id() | ||
|
||
authHeader = {"Authorization": f"Bearer {token}"} | ||
r = requests.get( | ||
f'{ananda_api}/manage-accounts/v1.2/api/orgs/{org_id}/users/{user_id}', | ||
headers=authHeader) | ||
|
||
try: | ||
user_groups = r.json()['groupIds'] | ||
except Exception: | ||
print('Error: user was not found') | ||
exit(1) | ||
|
||
return user_groups | ||
|
||
|
||
def list_resource(resource): | ||
authHeader = {"Authorization": f"Bearer {token}"} | ||
r = requests.get( | ||
f'{ananda_api}/manage-accounts/v1.2/api/orgs/{org_id}/{resource}', | ||
headers=authHeader) | ||
|
||
print(json.dumps(r.json(), indent=4, sort_keys=True)) | ||
|
||
|
||
def set_user_groups(): | ||
user_id = get_user_id() | ||
group_id = get_group_id() | ||
user_groups = get_user_groups() | ||
|
||
authHeader = {"Authorization": f"Bearer {token}"} | ||
|
||
if args.api_call == 'add_user_to_group': | ||
data = user_groups + [group_id] | ||
elif args.api_call == 'remove_user_from_group': | ||
try: | ||
user_groups.remove(group_id) | ||
except Exception: | ||
print('Error: user is not in group') | ||
exit(1) | ||
data = user_groups | ||
|
||
r = requests.post( | ||
f'{ananda_api}/manage-accounts/v1.2/api/orgs/{org_id}/users/{user_id}/groups', | ||
json=data, | ||
headers=authHeader) | ||
|
||
|
||
def main(): | ||
if args.api_call == 'list_users': | ||
list_resource('users') | ||
if args.api_call == 'list_groups': | ||
list_resource('groups') | ||
if args.api_call == 'add_user_to_group' or args.api_call == 'remove_user_from_group': | ||
set_user_groups() | ||
|
||
|
||
if __name__ == '__main__': | ||
parser = argparse.ArgumentParser() | ||
parser.add_argument( | ||
'api_call', | ||
help='The API call you want to make, currently supported are: ' | ||
'list_users, ' | ||
'list_groups, ' | ||
'add_user_to_group, ' | ||
'remove_user_from_group') | ||
parser.add_argument('--token', help='your Ananda API token') | ||
parser.add_argument( | ||
'--user', | ||
help='user you want to add to or remove from group, ' | ||
'you can either specify email address or first and last name') | ||
parser.add_argument('--group', help='name of the group you want to add or remove a user from') | ||
args = parser.parse_args() | ||
|
||
org_id, token = get_bearer_token() | ||
main() | ||
logout() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
requests==2.27.0 |