# flake8: noqa F501 import re from http import HTTPStatus as status from flask import ( Blueprint, render_template, url_for, redirect, flash, request, session, jsonify, current_app, ) from flask_login import login_user, logout_user, login_required from app import models as m from app import forms as f from app.logger import log from siwe.siwe import ( SiweMessage, generate_nonce, ValidationError, ExpiredMessage, MalformedSession, InvalidSignature, ) from web3 import HTTPProvider auth_blueprint = Blueprint("auth", __name__) @auth_blueprint.route("/login", methods=["GET", "POST"]) def login(): form = f.LoginForm(request.form) if form.validate_on_submit(): user = m.User.authenticate(form.user_id.data, form.password.data) log(log.INFO, "Form submitted. User: [%s]", user) if user: login_user(user) log(log.INFO, "Login successful.") flash("Login successful.", "success") return redirect(url_for("main.index")) flash("Wrong user ID or password.", "danger") elif form.is_submitted(): log(log.WARNING, "Form submitted error: [%s]", form.errors) return render_template("auth/login.html", form=form) @auth_blueprint.route("/logout") @login_required def logout(): logout_user() log(log.INFO, "You were logged out.") session.clear() return redirect(url_for("main.index")) @auth_blueprint.route("/nonce") def nonce(): session["nonce"] = generate_nonce() return session["nonce"] PATTERN_FORMAT_JS = re.compile(r"(?