isp-maintenance/mgrctl/utils/api_users.py

93 lines
2.9 KiB
Python
Raw Normal View History

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()
2024-06-06 15:01:21 +08:00
def get_users(self, role: str) -> list:
data = {}
if role == 'admin':
data = {"where": "((roles+CP+'%@admin%')+AND+(state+EQ+'active'))"}
2024-06-06 15:01:21 +08:00
response = self.callback.call_api(
url='/user',
method='GET',
data=data
)
2024-06-06 15:01:21 +08:00
users = self._extract_users(users=response)
return users
2024-06-06 15:01:21 +08:00
def _extract_users(self, users: dict) -> list:
return users.get('list', [])
def _format_users(self, users: list) -> list:
output = []
2024-06-06 15:01:21 +08:00
for user in users:
output.append({
'id': user.get('id', ''),
'email': user.get('email', ''),
'roles': user.get('roles', []),
2024-06-06 15:01:21 +08:00
'state': user.get('state', ''),
# add more fields here...
})
return output
def get_first_random_admin(self):
users = self.get_users(role='admin')
admin = {}
2024-06-06 15:01:21 +08:00
for user in users:
if '@admin' in user.get('roles', []):
admin = user
break
return admin
2024-06-06 15:01:21 +08:00
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'))
2024-06-06 15:01:21 +08:00
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'))