diff --git a/hiboo/account/login.py b/hiboo/account/login.py index ad5afca1def2ff01ae4e06cba92063c0023a3af5..08132659b62f9597bb2d387b06e4583ab6263310 100644 --- a/hiboo/account/login.py +++ b/hiboo/account/login.py @@ -8,14 +8,14 @@ import datetime import flask_login import flask -@blueprint.route("/signin", methods=["GET", "POST"]) -def signin(): +@blueprint.route("/signin/password", methods=["GET", "POST"]) +def signin_password(): form = forms.LoginForm() if form.validate_on_submit(): user = models.User.login(form.username.data, form.password.data) if user and models.Auth.TOTP in user.auths: session["username"] = user.username - return flask.redirect(utils.url_for(".totp_verify")) + return flask.redirect(utils.url_for(".signin_totp")) elif user: flask_login.login_user(user) if form.remember_me.data == True: @@ -23,12 +23,12 @@ def signin(): return flask.redirect(utils.url_or_intent(".home")) else: flask.flash(_("Wrong credentials"), "danger") - return flask.render_template("account_signin.html", form=form, - action=utils.url_for(".signin")) + return flask.render_template("account_signin_password.html", form=form, + action=utils.url_for(".signin_password")) -@blueprint.route("/totp/verify", methods=["GET", "POST"]) -def totp_verify(): +@blueprint.route("/signin/totp", methods=["GET", "POST"]) +def signin_totp(): form = forms.TotpForm() username = session.get("username") or flask.abort(403) user = models.User.query.filter_by(username=username).first() or flask.abort(403) @@ -39,14 +39,14 @@ def totp_verify(): return flask.redirect(utils.url_or_intent(".home")) else: flask.flash(_("Wrong TOTP"), "danger") - return flask.render_template("account_totp_verify.html", form=form) + return flask.render_template("account_signin_totp.html", form=form) @blueprint.route("/signout") @security.authentication_required() def signout(): flask_login.logout_user() - return flask.redirect(flask.url_for(".signin")) + return flask.redirect(flask.url_for(".signin_password")) @blueprint.route("/signup", methods=["GET", "POST"]) @@ -64,7 +64,7 @@ def signup(): claims.validate() except Exception as e: flask.flash(_("Invalid or expired signup link"), "danger") - return flask.redirect(flask.url_for(".signin")) + return flask.redirect(flask.url_for(".signin_password")) form = forms.SignupForm() if form.validate_on_submit(): conflict = models.User.query.filter_by(username=form.username.data).first() @@ -86,14 +86,14 @@ def signup(): return flask.redirect(utils.url_or_intent(".home")) return flask.render_template("account_signup.html", form=form) -@blueprint.route("/reset", methods=["GET", "POST"]) -def reset(): +@blueprint.route("/auth/password/reset", methods=["GET", "POST"]) +def password_reset(): token = flask.request.args.get('token') or flask.abort(403) key = flask.current_app.config["SECRET_KEY"] jwt = JsonWebToken(['HS512']) claims_options = { 'exp': {'essential': True, 'value': datetime.datetime.now().timestamp()}, - 'aud': {'essential': True, 'value': flask.url_for('.reset')}, + 'aud': {'essential': True, 'value': flask.url_for('.password_reset')}, 'user_uuid': {'essential': True} } try: @@ -102,7 +102,7 @@ def reset(): user = models.User.query.get(claims["user_uuid"]) or flask.abort(404) except Exception as e: flask.flash(_("Invalid or expired reset link"), "danger") - return flask.redirect(flask.url_for(".signin")) + return flask.redirect(flask.url_for(".signin_password")) form = forms.PasswordForm() del form.old if form.validate_on_submit(): @@ -112,5 +112,5 @@ def reset(): models.db.session.add(auth) models.db.session.commit() flask.flash(_("Successfully reset your password"), "success") - return flask.redirect(flask.url_for(".signin")) - return flask.render_template("account_reset.html", form=form) + return flask.redirect(flask.url_for(".signin_password")) + return flask.render_template("account_password_reset.html", form=form) diff --git a/hiboo/account/settings.py b/hiboo/account/settings.py index 4b61027bd37d6fb01aab7555fb06dc3598c2b175..ef92a09c5a53efed64e85c2de1e0f80e5a9c42b7 100644 --- a/hiboo/account/settings.py +++ b/hiboo/account/settings.py @@ -11,7 +11,7 @@ import qrcode import base64 -@blueprint.route("/password", methods=["GET", "POST"]) +@blueprint.route("/auth/password", methods=["GET", "POST"]) @security.authentication_required() def password(): form = forms.PasswordForm() @@ -26,10 +26,10 @@ def password(): return flask.redirect(flask.url_for(".home")) else: flask.flash(_("Wrong credentials, check your old password"), "danger") - return flask.render_template("account_password.html", form=form) + return flask.render_template("account_auth_password.html", form=form) -@blueprint.route("/totp", methods=["GET", "POST"]) +@blueprint.route("/auth/totp", methods=["GET", "POST"]) @security.authentication_required() def totp(): user = flask_login.current_user @@ -44,13 +44,13 @@ def totp(): img.save(buffered, format="PNG") qr = base64.b64encode(buffered.getvalue()).decode('ascii') return flask.render_template( - "account_totp.html", + "account_auth_totp.html", key=key, name=user.username, issuer=issuer, qr=qr ) - return flask.render_template("account_totp.html") + return flask.render_template("account_auth_totp.html") -@blueprint.route("/totp/setup", methods=["GET", "POST"]) +@blueprint.route("/auth/totp/setup", methods=["GET", "POST"]) @security.authentication_required() @security.confirmation_required("setup TOTP") def totp_setup(): @@ -66,7 +66,7 @@ def totp_setup(): return flask.redirect(flask.url_for(".totp")) -@blueprint.route("/totp/delete", methods=["GET", "POST"]) +@blueprint.route("/auth/totp/delete", methods=["GET", "POST"]) @security.authentication_required() @security.confirmation_required("disable TOTP") def totp_delete(): diff --git a/hiboo/account/templates/account_password.html b/hiboo/account/templates/account_auth_password.html similarity index 100% rename from hiboo/account/templates/account_password.html rename to hiboo/account/templates/account_auth_password.html diff --git a/hiboo/account/templates/account_reset.html b/hiboo/account/templates/account_auth_password_reset.html similarity index 100% rename from hiboo/account/templates/account_reset.html rename to hiboo/account/templates/account_auth_password_reset.html diff --git a/hiboo/account/templates/account_totp.html b/hiboo/account/templates/account_auth_totp.html similarity index 100% rename from hiboo/account/templates/account_totp.html rename to hiboo/account/templates/account_auth_totp.html diff --git a/hiboo/account/templates/account_signin.html b/hiboo/account/templates/account_signin_password.html similarity index 100% rename from hiboo/account/templates/account_signin.html rename to hiboo/account/templates/account_signin_password.html diff --git a/hiboo/account/templates/account_totp_verify.html b/hiboo/account/templates/account_signin_totp.html similarity index 100% rename from hiboo/account/templates/account_totp_verify.html rename to hiboo/account/templates/account_signin_totp.html diff --git a/hiboo/templates/base.html b/hiboo/templates/base.html index 91b8195b04c93d06905662106eb2a526df20b7d1..0bdba6436c6cd4c293e42ccc12284aefffa8f100 100644 --- a/hiboo/templates/base.html +++ b/hiboo/templates/base.html @@ -33,7 +33,7 @@ </li> {% else %} <li class="nav-item user"> - <a href="{{ url_for("account.signin") }}" class="nav-link"> + <a href="{{ url_for("account.signin_password") }}" class="nav-link"> <i class="fas fa-sign-in"></i> {% trans %}Sign in{% endtrans %} </a> diff --git a/hiboo/templates/sidebar.html b/hiboo/templates/sidebar.html index 3a1a5450b8166d07f2d74271464130c94b30ecec..8f2ca4b3de9fc0235d9821855805ac1dc7532cd1 100644 --- a/hiboo/templates/sidebar.html +++ b/hiboo/templates/sidebar.html @@ -37,7 +37,7 @@ </a> </li> <li class="nav-item"> - <a class="nav-link" href="{{ utils.url_for("account.signin") }}"> + <a class="nav-link" href="{{ utils.url_for("account.signin_password") }}"> <i class="nav-icon fas fa-sign-in-alt"></i> <p>{% trans %}Sign in{% endtrans %}</p> </a> </li> diff --git a/hiboo/user/views.py b/hiboo/user/views.py index 86b4cdda07d0c2266ffe86748eeeb9ca8a5b8c13..cf242338e6891b3be861c365fa6892f0f5b9da45 100644 --- a/hiboo/user/views.py +++ b/hiboo/user/views.py @@ -29,7 +29,7 @@ def details(user_uuid): return flask.render_template("user_details.html", user=user) -@blueprint.route("/reset/<user_uuid>", methods=["GET", "POST"]) +@blueprint.route("/auth/password/reset/<user_uuid>", methods=["GET", "POST"]) @security.admin_required() @security.confirmation_required("generate a password reset link") def password_reset(user_uuid): @@ -37,13 +37,13 @@ def password_reset(user_uuid): expired = datetime.datetime.now() + datetime.timedelta(days=1) payload = { "exp": int(expired.timestamp()), - "aud": flask.url_for('account.reset'), + "aud": flask.url_for('account.password_reset'), "user_uuid": user.uuid } header = {"alg": "HS512"} key = flask.current_app.config["SECRET_KEY"] token = jwt.encode(header, payload, key) - reset_link = flask.url_for("account.reset", token=token, _external=True) + reset_link = flask.url_for("account.password_reset", token=token, _external=True) flask.flash(_("Reset link: {}").format(reset_link), "success") return flask.redirect(flask.url_for(".details", user_uuid=user.uuid)) diff --git a/hiboo/utils.py b/hiboo/utils.py index 9bf6125422179cf91b68251edd74e72592da2825..528ac29e538ffaac800c053f1199ec9cf3d16f04 100644 --- a/hiboo/utils.py +++ b/hiboo/utils.py @@ -13,13 +13,13 @@ from werkzeug import routing login = flask_login.LoginManager() login.login_view = "account.login" INTENTS = "intents" -DISPLAY_HELP = ("account.signin", "account.signup") +DISPLAY_HELP = ("account.signin_password", "account.signup") @login.unauthorized_handler def handle_needs_login(): return flask.redirect( - url_for('account.signin', intent=flask.request.endpoint) + url_for('account.signin_password', intent=flask.request.endpoint) )