modified: routes/journal_routes.py modified: static/css/style.css modified: templates/base.html new file: templates/datenschutz.html modified: templates/future.html new file: templates/impressum.html
48 lines
1.5 KiB
Python
48 lines
1.5 KiB
Python
"""Auth-Routen: Login und Logout."""
|
|
from flask import Blueprint, render_template, request, redirect, url_for, session, flash
|
|
|
|
from auth import verify_password
|
|
from db_helpers import get_user_by_username
|
|
|
|
auth_bp = Blueprint("auth", __name__)
|
|
|
|
|
|
@auth_bp.route("/login", methods=["GET", "POST"])
|
|
def login():
|
|
if request.method == "POST":
|
|
username = request.form.get("username", "").strip()
|
|
password = request.form.get("password", "")
|
|
|
|
user = get_user_by_username(username)
|
|
if user and verify_password(password, user["salt"], user["password_hash"]):
|
|
session.clear()
|
|
session["user_id"] = user["id"]
|
|
session["username"] = user["username"]
|
|
session["is_admin"] = bool(user["is_admin"])
|
|
flash(f"Willkommen, {user['username']}!", "success")
|
|
if user["is_admin"]:
|
|
return redirect(url_for("admin.dashboard"))
|
|
return redirect(url_for("journal.index"))
|
|
flash("Ungültiger Benutzername oder Passwort.", "danger")
|
|
|
|
return render_template("login.html")
|
|
|
|
|
|
@auth_bp.route("/logout", methods=["POST"])
|
|
def logout():
|
|
session.clear()
|
|
flash("Du wurdest abgemeldet.", "info")
|
|
return redirect(url_for("auth.login"))
|
|
|
|
|
|
@auth_bp.route("/impressum")
|
|
def impressum():
|
|
"""Öffentliche Impressum-Seite (gesetzlich Pflicht)."""
|
|
return render_template("impressum.html")
|
|
|
|
|
|
@auth_bp.route("/datenschutz")
|
|
def datenschutz():
|
|
"""Öffentliche Datenschutz-/GDPR-Seite."""
|
|
return render_template("datenschutz.html")
|