From cdf3a925278c6d01b755b14ebcede36f7732df85 Mon Sep 17 00:00:00 2001 From: MOIS3Y Date: Thu, 6 Jun 2024 16:01:21 +0900 Subject: [PATCH] Update: access funcs --- mgrctl/apps/vm6/auth/commands.py | 41 +++++++++++++++++--------------- mgrctl/utils/api_users.py | 36 +++++++++++++++++++++------- 2 files changed, 49 insertions(+), 28 deletions(-) diff --git a/mgrctl/apps/vm6/auth/commands.py b/mgrctl/apps/vm6/auth/commands.py index 783e118..e38defb 100644 --- a/mgrctl/apps/vm6/auth/commands.py +++ b/mgrctl/apps/vm6/auth/commands.py @@ -38,16 +38,22 @@ def user(): ) def ls(all, admins): if all: - user_cursor.echo_users(role='all') + users = user_cursor.get_users(role='all') elif admins: - user_cursor.echo_users(role='admin') + users = user_cursor.get_users(role='admin') else: - user_cursor.echo_users(role='all') + users = user_cursor.get_users(role='all') + # print users: + user_cursor.echo_users(users) -@user.command(help='Generate access key and return auth link(s)') +@user.command( + help='Generate an access key and return auth link(s)', + no_args_is_help=True +) @click.option( '--id', + '_id', required=False, type=int, help='User id' @@ -62,7 +68,7 @@ def ls(all, admins): '--random', is_flag=True, required=False, - help='Interactive mode, ignores other keys' + help='Generate access key for the first available admin' ) @click.option( '--interactive', @@ -70,24 +76,21 @@ def ls(all, admins): required=False, help='Interactive mode, ignores other keys' ) -def access(id, count, interactive, random): - if id and not count: - keys = user_cursor.get_access_keys(user=id, count=1) - links = user_cursor.gen_access_links(keys) - user_cursor.echo_access_links(links) - elif id and count: - keys = user_cursor.get_access_keys(user=id, count=count) - links = user_cursor.gen_access_links(keys) - user_cursor.echo_access_links(links) - elif interactive: - pass +def access(_id, count, interactive, random): + if _id and not count: + keys = user_cursor.get_access_keys(user=_id, count=1) + elif _id and count: + keys = user_cursor.get_access_keys(user=_id, count=count) elif random: admin = user_cursor.get_first_random_admin() - keys = user_cursor.get_access_keys(user=admin.get('id', 3), count=1) - links = user_cursor.gen_access_links(keys) - user_cursor.echo_access_links(links) + keys = user_cursor.get_access_keys(user=admin.get('id', 3)) + elif interactive: + user_cursor.gen_access_links_interactive() + return # exit from func else: pass + links = user_cursor.gen_access_links(keys) + user_cursor.echo_access_links(links) @user.command(help='Generate API token for mgrctl user') diff --git a/mgrctl/utils/api_users.py b/mgrctl/utils/api_users.py index 8a75e13..7459936 100644 --- a/mgrctl/utils/api_users.py +++ b/mgrctl/utils/api_users.py @@ -10,38 +10,43 @@ class UserAPI(object): self.callback_class = callback_class self.callback = callback_class() - def get_users(self, role: str) -> dict: + def get_users(self, role: str) -> list: data = {} if role == 'admin': data = {"where": "((roles+CP+'%@admin%')+AND+(state+EQ+'active'))"} - return self.callback.call_api( + response = self.callback.call_api( url='/user', method='GET', data=data ) + users = self._extract_users(users=response) + return users - def _format_users(self, users: dict) -> list: + def _extract_users(self, users: dict) -> list: + return users.get('list', []) + + def _format_users(self, users: list) -> list: output = [] - for user in users.get('list', []): + for user in users: output.append({ 'id': user.get('id', ''), 'email': user.get('email', ''), 'roles': user.get('roles', []), - 'state': user.get('state', '') + 'state': user.get('state', ''), + # add more fields here... }) return output def get_first_random_admin(self): users = self.get_users(role='admin') admin = {} - for user in users.get('list', []): - if '@admin' in admin.get('roles', []): + for user in users: + if '@admin' in user.get('roles', []): admin = user break return admin - def echo_users(self, role: str) -> None: - users = self.get_users(role) + def echo_users(self, users: list) -> None: output = self._format_users(users) click.echo(tabulate(output, headers='keys')) @@ -66,6 +71,19 @@ class UserAPI(object): def echo_access_links(self, links: list) -> None: click.echo(tabulate(links, headers='keys')) + def gen_access_links_interactive(self) -> None: + users = self.get_users(role='admin') + self.echo_users(users) + try: + click.echo('Choose user id and count of keys') + _id = int(input('User ID: ')) + count = int(input('Count of keys: ')) + keys = self.get_access_keys(user=_id, count=count) + links = self.gen_access_links(keys) + self.echo_access_links(links) + except ValueError: + click.echo('Error: Invalid, value is not a valid integer') + def gen_api_token(self, email=None, password=None): token = self.callback.get_auth_token(email, password) return token