Spaces:
Paused
Paused
| 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): | |
| """ | |
| Handle a resume upload by saving the file to a temporary location and | |
| returning an empty feature dictionary. This function no longer attempts | |
| to parse the resume contents; it simply stores the file so that it can | |
| be referenced later (e.g. for downloading or inspection) and returns | |
| a placeholder features object. A tuple of (features_dict, error_message, | |
| filepath) is returned. If an error occurs, ``features_dict`` will be | |
| ``None`` and ``error_message`` will contain a description of the error. | |
| """ | |
| # Validate that a file was provided | |
| if not file or file.filename == '': | |
| return None, "No file uploaded", None | |
| try: | |
| # Generate a safe filename and determine the target directory. Use | |
| # ``/tmp/resumes`` so that the directory is writable within Hugging | |
| # Face Spaces. Creating the directory with ``exist_ok=True`` ensures | |
| # that it is available without raising an error if it already exists. | |
| filename = secure_filename(file.filename) | |
| temp_dir = os.path.join('/tmp', 'resumes') | |
| os.makedirs(temp_dir, exist_ok=True) | |
| filepath = os.path.join(temp_dir, filename) | |
| # Save the uploaded file to the temporary location. If this fails | |
| # (e.g. due to permissions issues) the exception will be caught below. | |
| file.save(filepath) | |
| # Resume parsing has been removed from this project. To maintain | |
| # compatibility with the rest of the application, return an empty | |
| # dictionary of features. Downstream code will interpret an empty | |
| # dictionary as "no extracted features", which still allows the | |
| # interview flow to proceed. | |
| features = {} | |
| return features, None, filepath | |
| except Exception as e: | |
| # Log the error and propagate it to the caller. Returning None for | |
| # ``features`` signals that the upload failed. | |
| print(f"Error in handle_resume_upload: {e}") | |
| return None, str(e), None | |
| def login(): | |
| form = LoginForm() | |
| # When the form is submitted and passes validation, attempt to authenticate | |
| # the user. If the email/password pair is valid, log them in and provide | |
| # a success flash message so the user has feedback. Without this message | |
| # the application silently redirects to the home page, which can be | |
| # confusing. If authentication fails, flash an error message. | |
| 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) | |
| # ✅ Provide a success message so users know the login worked | |
| flash('You have been logged in successfully!', 'success') | |
| return redirect(url_for('index')) | |
| else: | |
| flash('Invalid credentials', 'danger') | |
| return render_template('login.html', form=form) | |
| 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) | |
| def logout(): | |
| logout_user() | |
| flash('You have been logged out successfully.', 'info') | |
| return redirect(url_for('auth.login')) |