import click from tabulate import tabulate from mgrctl.settings.platform import PLATFORM_URL class UserAPI(object): def __init__(self, callback_class): """Announces required parameters""" self.callback_class = callback_class self.callback = callback_class() def get_users(self, role: str) -> list: data = {} if role == 'admin': data = {"where": "((roles+CP+'%@admin%')+AND+(state+EQ+'active'))"} response = self.callback.call_api( url='/user', method='GET', data=data ) users = self._extract_users(users=response) return users def _extract_users(self, users: dict) -> list: return users.get('list', []) def _format_users(self, users: list) -> list: output = [] for user in users: output.append({ 'id': user.get('id', ''), 'email': user.get('email', ''), 'roles': user.get('roles', []), '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: if '@admin' in user.get('roles', []): admin = user break return admin def echo_users(self, users: list) -> None: output = self._format_users(users) click.echo(tabulate(output, headers='keys')) def get_access_keys(self, user, count=1): keys = [] while count >= 1: count -= 1 key = self.callback.get_auth_key(user=user) check = key.get('key', '') if check: keys.append(key) return keys def gen_access_links(self, keys: list) -> list: links = [] for key in keys: _id = key.get('id', '') link = f"{PLATFORM_URL}/auth/key/{key.get('key', '')}" links.append({'id': _id, 'link': link}) return links 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 def echo_api_token(self, token: dict) -> None: click.echo(tabulate([token], headers='keys'))