Add dci6 auth cli command #12

Merged
MOIS3Y merged 2 commits from MOIS3Y/isp-maintenance:api into main 2024-06-06 23:28:11 +08:00
3 changed files with 106 additions and 9 deletions
Showing only changes of commit d4de07c340 - Show all commits

View File

@ -0,0 +1,10 @@
# █▀▄▀█ █▀▀ ▀█▀ ▄▀█ ▀
# █░▀░█ ██▄ ░█░ █▀█ ▄
# -- -- -- -- -- -- -
__author__ = "MOIS3Y"
__credits__ = ["Stepan Zhukovsky"]
__license__ = "MIT"
__version__ = "0.1.0"
__maintainer__ = "Stepan Zhukovsky"
__email__ = "stepan@zhukovsky.me"
__status__ = "Development"

View File

@ -1,12 +1,99 @@
import click
@click.group(help='access command for lazy example')
@click.option('--debug/--no-debug', default=False)
def cli(debug):
click.echo(f"Debug mode is {'on' if debug else 'off'}")
from mgrctl.apps.dci6.auth import __version__
from mgrctl.api.dci6 import AuthAPI
from mgrctl.utils.api_users import UserAPI
@cli.command()
def enable():
click.echo('Access granted')
user_cursor = UserAPI(callback_class=AuthAPI)
@click.group(help='auth cmd for auth in DCImanager 6')
@click.version_option(
version=__version__,
package_name='mgrctl.apps.dci6.auth',
message=__version__
)
def cli():
pass
@cli.group(help='Manage users')
def user():
pass
@user.command(help='List users')
@click.option(
'--all',
is_flag=True,
required=False,
help='Show all users'
)
@click.option(
'--admins',
is_flag=True,
required=False,
help='Show all active admins',
)
def ls(all, admins):
if all:
users = user_cursor.get_users(role='all')
elif admins:
users = user_cursor.get_users(role='admin')
else:
users = user_cursor.get_users(role='all')
# print users:
user_cursor.echo_users(users)
@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'
)
@click.option(
'--count',
required=False,
type=int,
help='Number of access keys generated',
)
@click.option(
'--random',
is_flag=True,
required=False,
help='Generate access key for the first available admin'
)
@click.option(
'--interactive',
is_flag=True,
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)
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))
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')
def token():
token = user_cursor.gen_api_token()
user_cursor.echo_api_token(token)

View File

@ -7,7 +7,7 @@ from mgrctl.settings.general import INSTALLED_APPS
@click.group(
cls=LazyGroup,
lazy_subcommands=INSTALLED_APPS['dci6'],
help='dci6 command for lazy example',
help='dci6 command for DCI6manager management',
)
def cli():
pass