from flask import Blueprint, render_template, request, redirect, url_for, session, flash from flask_login import login_user from app.db import get_db from werkzeug.security import generate_password_hash, check_password_hash from app.models.user import User auth_bp = Blueprint("auth", __name__) @auth_bp.route("/login", methods=["GET", "POST"]) def login(): if request.method == "POST": username = request.form["username"] password = request.form["password"] db = get_db() row = db.execute( "SELECT * FROM users WHERE username = ?", (username,) ).fetchone() if row and check_password_hash(row["password"], password): user = User(id=row["id"], username=row["username"]) login_user(user) return redirect(url_for("main.home")) else: flash("Invalid username or password") return render_template("login.html") @auth_bp.route("/register", methods=["GET", "POST"]) def register(): if request.method == "POST": username = request.form.get("username") password = request.form.get("password") if not username or not password: flash("Please fill out all fields") return render_template("register.html") db = get_db() existing_user = db.execute( "SELECT id FROM users WHERE username = ?", (username,) ).fetchone() if existing_user: flash("Username already taken") return render_template("register.html") hashed_password = generate_password_hash(password) db.execute( "INSERT INTO users (username, password) VALUES (?, ?)", (username, hashed_password) ) db.commit() flash("Account created! Please log in.") return redirect(url_for("auth.login")) return render_template("register.html")