51 lines
1.9 KiB
Python
51 lines
1.9 KiB
Python
import click
|
|
from flask.cli import with_appcontext
|
|
from werkzeug.exceptions import BadRequest, Conflict, NotFound
|
|
from flaschengeist.controller import roleController, userController
|
|
|
|
|
|
USER_KEY = f"{__name__}.user"
|
|
|
|
|
|
def user(ctx, param, value):
|
|
if not value or ctx.resilient_parsing:
|
|
return
|
|
|
|
click.echo("Adding new user")
|
|
ctx.meta[USER_KEY] = {}
|
|
try:
|
|
ctx.meta[USER_KEY]["userid"] = click.prompt("userid", type=str)
|
|
ctx.meta[USER_KEY]["firstname"] = click.prompt("firstname", type=str)
|
|
ctx.meta[USER_KEY]["lastname"] = click.prompt("lastname", type=str)
|
|
ctx.meta[USER_KEY]["display_name"] = click.prompt("displayed name", type=str, default="")
|
|
ctx.meta[USER_KEY]["mail"] = click.prompt("mail", type=str, default="")
|
|
ctx.meta[USER_KEY]["password"] = click.prompt("password", type=str, confirmation_prompt=True, hide_input=True)
|
|
ctx.meta[USER_KEY] = {k: v for k, v in ctx.meta[USER_KEY].items() if v != ""}
|
|
|
|
except click.Abort:
|
|
click.echo("\n!!! User was not added, aborted.")
|
|
del ctx.meta[USER_KEY]
|
|
|
|
|
|
@click.command()
|
|
@click.option("--add-role", help="Add new role", type=str)
|
|
@click.option("--set-admin", help="Make a role an admin role, adding all permissions", type=str)
|
|
@click.option("--add-user", help="Add new user interactivly", callback=user, is_flag=True, expose_value=False)
|
|
@with_appcontext
|
|
def users(add_role, set_admin):
|
|
from flaschengeist.database import db
|
|
|
|
ctx = click.get_current_context()
|
|
|
|
try:
|
|
if add_role:
|
|
roleController.create_role(add_role)
|
|
if set_admin:
|
|
role = roleController.get(set_admin)
|
|
role.permissions = roleController.get_permissions()
|
|
db.session.commit()
|
|
if USER_KEY in ctx.meta:
|
|
userController.register(ctx.meta[USER_KEY], ctx.meta[USER_KEY]["password"])
|
|
except (BadRequest, NotFound) as e:
|
|
ctx.fail(e.description)
|