import click from flask import Blueprint, url_for import wowstash.models from wowstash.library.docker import docker from wowstash.models import User, PasswordReset, ServerMessage from wowstash.factory import db, bcrypt bp = Blueprint("cli", "cli", cli_group=None) @bp.cli.command('clean_containers') def clean_containers(): docker.cleanup() @bp.cli.command('reset_wallet') @click.argument('user_id') def reset_wallet(user_id): user = User.query.get(user_id) user.clear_wallet_data() print(f'Wallet data cleared for user {user.id}') @bp.cli.command('init') def init(): db.create_all() @bp.cli.command('reset_password') @click.argument('user_email') @click.argument('duration') def reset_password(user_email, duration): user = User.query.filter(User.email==user_email).first() if not user: click.echo('[!] Email address does not exist!') return pwr = PasswordReset( user=user.id, hash=PasswordReset().generate_hash(), expiration_hours=duration ) db.session.add(pwr) db.session.commit() click.echo(f'[+] Password reset link #{pwr.id} for {user_email} expires in {duration} hours: {url_for("auth.reset", hash=pwr.hash)}') @bp.cli.command('set_message') @click.argument('msg_content') def set_message(msg_content): s = ServerMessage.query.all() if s: db.session.delete(s.first()) db.session.commit() _s = ServerMessage( content=msg_content ) db.session.add(_s) db.session.commit()