from flask import Blueprint, render_template, request, redirect, url_for, flash, session from api.models import db, User from functools import wraps auth_bp = Blueprint("auth", __name__) @auth_bp.route("/signup", methods=["GET", "POST"]) def signup(): if request.method == "POST": first_name = request.form.get("first_name") last_name = request.form.get("last_name") email = request.form.get("email") password = request.form.get("password") confirm_password = request.form.get("confirm_password") if password != confirm_password: flash("Passwords do not match!") return redirect(url_for("auth.signup")) if User.query.filter_by(email=email).first(): flash("Email already registered!") return redirect(url_for("auth.signup")) user = User(first_name=first_name, last_name=last_name, email=email) user.set_password(password=password) db.session.add(user) db.session.commit() session['user_id'] = user.id session['user_name'] = user.first_name session['last_name'] = user.last_name flash("Login Successful!") return render_template("signup.html") return render_template("signup.html") @auth_bp.route("/login", methods=["GET", "POST"]) def login(): if request.method == "POST": email = request.form.get("email") password = request.form.get("password") user = User.query.filter_by(email=email).first() if user and user.check_password(password): session['user_id'] = user.id session['user_name'] = user.first_name session['last_name'] = user.last_name flash("Login Successful!") return render_template("login.html") else: flash("Invalid email or password.") return redirect(url_for("auth.login")) return render_template("login.html") @auth_bp.route("/logout") def logout(): session.pop('user_id', None) session.pop('user_name', None) return redirect(url_for("home")) def login_required(f): @wraps(f) def decorated_function(*args, **kwargs): if "user_id" not in session: return redirect(url_for("auth.login")) return f(*args, **kwargs) return decorated_function