def signup_user(): try: username = request.json.get('username', None) email = request.json.get('email', None) password = request.json.get('password', None) if not username or not email or not password: return jsonify(status=400, msg="some arguments missing"), 400 hashed_password = generate_password_hash(password, method='sha256') user = User(username=username, email=email, password=hashed_password, admin=False, confirmed=False) if not user: return jsonify( status=400, msg="user registration is not completed successfully"), 400 db.session.add(user) db.session.commit() access_token = create_access_token(identity=username, expires_delta=False) refresh_token = create_refresh_token(identity=username) resp = jsonify(status=201, register=True, msg="user has been authenticated successfully", access_token=access_token, refresh_token=refresh_token, current_email=email) set_access_cookies(resp, access_token) set_refresh_cookies(resp, refresh_token) init_client_upload_dir(current_app.config['UPLOAD_BASE_PATH'], username) send_verification_link(email, 'Email Confirmation', current_app.config['MAIL_DEFAULT_SENDER'], 'layouts/email/confirm.html', username) return resp, 201 except IntegrityError: db.session.rollback() return jsonify( status=400, register=False, msg="username or email address already exists please choose another" ) except AttributeError: return jsonify(status=400, register=False, msg="request body should be json format"), 400
def set_admin(username, email, hashed_password, admin, confirmed): admin = User(username=username, email=email, password=hashed_password, admin=admin, confirmed=confirmed) db.session.add(admin) db.session.commit() role = Role(role_id=1, user_public_id=str(admin.user_public_id)) db.session.add(role) db.session.commit() init_client_upload_dir(app.config['UPLOAD_BASE_PATH'], admin.username) send_verification_link(email, 'Email Confirmation', app.config['MAIL_DEFAULT_SENDER'], 'layouts/email/confirm.html', admin.username)
def send_reset_token(): data = request.get_json() email = data.get('email', None) user = User.query.filter_by(email=email).first() if send_verification_link(email, "Please Reset Your Password", current_app.config['MAIL_DEFAULT_SENDER'], "layouts/email/send-reset-link.html", user.username): return jsonify(status=200, msg="If your email is valid, an email will be sent to you") return jsonify(status=401, msg="something is not right")
def resend_confirmation(): current_user = get_jwt_identity() user = User.query.filter_by(username=current_user).first() if not user or user.confirmed is True: return jsonify(status=200, msg="account already confirmed. Please login"), 200 if send_verification_link(user.email, "Email Confirmation", current_app.config['MAIL_DEFAULT_SENDER'], "layouts/email/confirm.html", user.username): return jsonify(status=200, msg="a new confirmation email has been sent"), 200
def init_user(username, email, password): try: user = User.query.filter_by( username=app.config['ADMIN_USERNAME']).first() if user and user.confirmed and user.admin: hashed_password = generate_password_hash(password, method='sha256') user = User(username=username, email=email, password=hashed_password, admin=False, confirmed=False) db.session.add(user) db.session.commit() role = Role(role_id=2, user_public_id=str(user.user_public_id)) db.session.add(role) db.session.commit() init_client_upload_dir(app.config['UPLOAD_BASE_PATH'], user.username) send_verification_link(app.config['ADMIN_EMAIL'], 'Email Confirmation', app.config['MAIL_DEFAULT_SENDER'], 'layouts/email/confirm.html', user.username) else: click.echo('you dont have permission to execute this command') except IntegrityError: db.session.rollback() click.echo( 'username or email address already exists please choose another'. format(username))