from prettytable import PrettyTable
import json
import logging
+import time
logger = logging.getLogger("osmclient")
"--projects",
# prompt="Comma separate list of projects",
multiple=True,
- callback=lambda ctx, param, value: "".join(value).split(",")
- if all(len(x) == 1 for x in value)
- else value,
+ callback=lambda ctx, param, value: (
+ "".join(value).split(",") if all(len(x) == 1 for x in value) else value
+ ),
help="list of project ids that the user belongs to",
)
@click.option(
@click.command(name="user-update", short_help="updates user information")
@click.argument("username")
-@click.option(
- "--password",
- # prompt=True,
- # hide_input=True,
- # confirmation_prompt=True,
- help="user password",
-)
@click.option("--set-username", "set_username", default=None, help="change username")
@click.option(
"--set-project",
multiple=True,
help="remove role(s) in a project. Can be used several times: 'project,role1[,role2,...]'",
)
-@click.option("--change_password", "change_password", help="user's current password")
+@click.option("--current-password", "current_password", help="user's current password")
@click.option(
- "--new_password",
+ "--new-password",
"new_password",
- help="user's new password to update in expiry condition",
+ # prompt=True,
+ # hide_input=True,
+ # confirmation_prompt=True,
+ help="new user password",
+)
+@click.option(
+ "--unlock",
+ is_flag=True,
+ help="unlock user",
+)
+@click.option(
+ "--renew",
+ is_flag=True,
+ help="renew user",
)
@click.pass_context
def user_update(
ctx,
username,
- password,
set_username,
set_project,
remove_project,
add_project_role,
remove_project_role,
- change_password,
+ current_password,
new_password,
+ unlock,
+ renew,
):
"""Update a user information
\b
USERNAME: name of the user
- PASSWORD: new password
SET_USERNAME: new username
SET_PROJECT: creating mappings for project/role(s)
REMOVE_PROJECT: deleting mappings for project/role(s)
ADD_PROJECT_ROLE: adding mappings for project/role(s)
REMOVE_PROJECT_ROLE: removing mappings for project/role(s)
- CHANGE_PASSWORD: user's current password to change
- NEW_PASSWORD: user's new password to update in expiry condition
+ CURRENT_PASSWORD: user's current password to change
+ NEW_PASSWORD: user's new password to be updated
+ UNLOCK: unlock user
+ RENEW: renew user
"""
logger.debug("")
user = {}
- user["password"] = password
user["username"] = set_username
user["set-project"] = set_project
user["remove-project"] = remove_project
user["add-project-role"] = add_project_role
user["remove-project-role"] = remove_project_role
- user["change_password"] = change_password
+ user["current_password"] = current_password
user["new_password"] = new_password
+ user["unlock"] = unlock
+ user["renew"] = renew
utils.check_client_version(ctx.obj, ctx.command.name)
- ctx.obj.user.update(username, user)
- if not user.get("change_password"):
+ if not user.get("current_password"):
+ # In case the password is valid but the end user wants to update it
ctx.obj.user.update(username, user)
else:
+ # In case the password has expired (also applies in first login)
ctx.obj.user.update(username, user, pwd_change=True)
utils.check_client_version(ctx.obj, ctx.command.name)
if filter:
filter = "&".join(filter)
- resp = ctx.obj.user.list(filter)
- table = PrettyTable(["name", "id"])
+ resp, admin_show = ctx.obj.user.list(filter)
for user in resp:
- table.add_row([user["username"], user["_id"]])
+ if user["username"] == "admin":
+ user["_admin"]["account_expire_time"] = "N/A"
+ if admin_show:
+ table = PrettyTable(["name", "id", "user_status", "expires_in"])
+ for user in resp:
+ table.add_row(
+ [
+ user["username"],
+ user["_id"],
+ user["_admin"]["user_status"].upper(),
+ (
+ time.strftime(
+ "%b-%d-%Y %X",
+ time.gmtime(user["_admin"]["account_expire_time"]),
+ )
+ if not user["username"] == "admin"
+ else user["_admin"]["account_expire_time"]
+ ),
+ ]
+ )
+ else:
+ table = PrettyTable(["name", "id"])
+ for user in resp:
+ table.add_row([user["username"], user["_id"]])
table.align = "l"
print(table)