@click.command("reset-password", help="Reset the account password.")
@click.option("--email", prompt=True, help="Account email to reset password for")
@click.option("--new-password", prompt=True, help="New password")
@click.option("--password-confirm", prompt=True, help="Confirm new password")
def reset_password(email, new_password, password_confirm):
Reset password of owner account
Only available in SELF_HOSTED mode
if str(new_password).strip() != str(password_confirm).strip():
click.echo(click.style("Passwords do not match.", fg="red"))
account = db.session.query(Account).filter(Account.email == email).one_or_none()
click.echo(click.style("Account not found for email: {}".format(email), fg="red"))
valid_password(new_password)
click.echo(click.style("Invalid password. Must match {}".format(password_pattern), fg="red"))
# generate password salt
salt = secrets.token_bytes(16)
base64_salt = base64.b64encode(salt).decode()
# encrypt password with salt
password_hashed = hash_password(new_password, salt)
base64_password_hashed = base64.b64encode(password_hashed).decode()
account.password = base64_password_hashed
account.password_salt = base64_salt
click.echo(click.style("Password reset successfully.", fg="green"))