Release Nouri 1.3.0 with improved food states and quick entry flow
This commit is contained in:
+27
-5
@@ -2,6 +2,7 @@ from __future__ import annotations
|
||||
|
||||
import functools
|
||||
import secrets
|
||||
from urllib.parse import parse_qsl, urlencode, urlsplit, urlunsplit
|
||||
|
||||
from flask import (
|
||||
Blueprint,
|
||||
@@ -25,23 +26,23 @@ auth_bp = Blueprint("auth", __name__, url_prefix="/auth")
|
||||
|
||||
def login_required(view):
|
||||
@functools.wraps(view)
|
||||
def wrapped_view(**kwargs):
|
||||
def wrapped_view(*args, **kwargs):
|
||||
if g.user is None:
|
||||
return redirect(url_for("auth.login"))
|
||||
return view(**kwargs)
|
||||
return view(*args, **kwargs)
|
||||
|
||||
return wrapped_view
|
||||
|
||||
|
||||
def admin_required(view):
|
||||
@functools.wraps(view)
|
||||
def wrapped_view(**kwargs):
|
||||
def wrapped_view(*args, **kwargs):
|
||||
if g.user is None:
|
||||
return redirect(url_for("auth.login"))
|
||||
if g.user["role"] != "admin":
|
||||
flash("Dieser Bereich ist für Admins gedacht.", "error")
|
||||
return redirect(url_for("main.dashboard"))
|
||||
return view(**kwargs)
|
||||
return view(*args, **kwargs)
|
||||
|
||||
return wrapped_view
|
||||
|
||||
@@ -53,6 +54,25 @@ def ensure_csrf_token() -> str:
|
||||
return token
|
||||
|
||||
|
||||
def wants_to_stay_on_form() -> bool:
|
||||
return request.form.get("save_mode", "").strip() == "stay"
|
||||
|
||||
|
||||
def url_with_scroll_position(url: str) -> str:
|
||||
raw_scroll = request.form.get("_scroll", "").strip()
|
||||
if not raw_scroll:
|
||||
return url
|
||||
try:
|
||||
scroll_value = max(0, int(float(raw_scroll)))
|
||||
except ValueError:
|
||||
return url
|
||||
|
||||
parts = urlsplit(url)
|
||||
query = dict(parse_qsl(parts.query, keep_blank_values=True))
|
||||
query["_scroll"] = str(scroll_value)
|
||||
return urlunsplit((parts.scheme, parts.netloc, parts.path, urlencode(query), parts.fragment))
|
||||
|
||||
|
||||
def normalize_login_value(raw: str) -> str:
|
||||
return raw.strip().lower()
|
||||
|
||||
@@ -231,7 +251,9 @@ def profile():
|
||||
)
|
||||
database.commit()
|
||||
flash("Dein Profil wurde aktualisiert.", "success")
|
||||
return redirect(url_for("auth.profile"))
|
||||
if wants_to_stay_on_form():
|
||||
return redirect(url_with_scroll_position(url_for("auth.profile")))
|
||||
return redirect(url_for("main.dashboard"))
|
||||
|
||||
flash(error, "error")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user