mirror of
				https://git.isptech.ru/ISPsystem/isp-maintenance.git
				synced 2025-10-30 07:03:02 +01:00 
			
		
		
		
	Update: access funcs
This commit is contained in:
		| @@ -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') | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user