from flask import Blueprint, render_template, redirect, url_for, flash, request, jsonify from flask_login import login_user, logout_user, login_required, current_user from werkzeug.utils import secure_filename import os import json from datetime import datetime from backend.form.AuthForms import LoginForm, SignupForm from backend.models.user import User from backend.models.database import db auth_bp = Blueprint('auth', __name__) def handle_resume_upload(file): """ Save uploaded file temporarily, extract features, then clean up. Returns (features_dict, error_message, filename) """ if not file or file.filename == '': return None, "No file uploaded", None try: # Get current directory for temp folder current_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) filename = secure_filename(file.filename) filepath = os.path.join(current_dir, 'temp', filename) os.makedirs(os.path.dirname(filepath), exist_ok=True) file.save(filepath) features = extract_resume_features(filepath) os.remove(filepath) # Clean up after parsing return features, None, filename except Exception as e: print(f"Error in handle_resume_upload: {e}") return None, str(e), None @auth_bp.route('/login', methods=['GET', 'POST']) def login(): form = LoginForm() if form.validate_on_submit(): user = User.query.filter_by(email=form.email.data).first() if user and user.check_password(form.password.data): login_user(user) return redirect(url_for('index')) else: flash('Invalid credentials', 'danger') return render_template('login.html', form=form) @auth_bp.route('/signup', methods=['GET', 'POST']) def signup(): form = SignupForm() if form.validate_on_submit(): existing_user = User.query.filter_by(email=form.email.data).first() if existing_user: flash('Email already registered.', 'warning') else: user = User( username=form.username.data, email=form.email.data, role=form.role.data ) user.set_password(form.password.data) db.session.add(user) db.session.commit() # Log the user in and redirect to profile completion login_user(user) flash('Account created successfully! Welcome to Codingo.', 'success') return redirect(url_for('index')) return render_template('signup.html', form=form) @auth_bp.route('/logout') @login_required def logout(): logout_user() flash('You have been logged out successfully.', 'info') return redirect(url_for('auth.login'))