"""Authentication routes.""" from flask import Blueprint, render_template, redirect, url_for, flash, request from flask_login import login_user, logout_user, login_required, current_user from werkzeug.security import check_password_hash from app.models.user import User auth_bp = Blueprint("auth", __name__) @auth_bp.route("/login", methods=["GET", "POST"]) def login(): if current_user.is_authenticated: return redirect(url_for("dashboard.index")) if request.method == "POST": username = request.form.get("username", "").strip() password = request.form.get("password", "") remember = bool(request.form.get("remember")) user = User.query.filter_by(username=username).first() if user and user.is_active and check_password_hash(user.password_hash, password): login_user(user, remember=remember) next_page = request.args.get("next") flash(f"Welcome back, {user.username}!", "success") return redirect(next_page or url_for("dashboard.index")) flash("Invalid username or password.", "danger") return render_template("auth/login.html") @auth_bp.route("/logout") @login_required def logout(): logout_user() flash("You have been logged out.", "info") return redirect(url_for("auth.login"))