from flask import Blueprint, render_template, redirect, url_for, flash, request from flask_login import login_user, logout_user, login_required, current_user from extensions import db, hash_password, check_password from models import User, ESPORT_GAMES auth_bp = Blueprint('auth', __name__, url_prefix='/auth') @auth_bp.route('/login', methods=['GET', 'POST']) def login(): if current_user.is_authenticated: return redirect(url_for('main.dashboard')) if request.method == 'POST': username = request.form.get('username') password = request.form.get('password') user = User.query.filter_by(username=username).first() if user and check_password(user.password_hash, password): if not user.is_active_account: flash('This account has been deactivated.', 'danger') return render_template('pages/login.html') login_user(user) next_page = request.args.get('next') flash(f'Welcome back, {user.full_name}!', 'success') return redirect(next_page) if next_page else redirect(url_for('main.dashboard')) else: flash('Login unsuccessful. Please check username and password.', 'danger') return render_template('pages/login.html') @auth_bp.route('/register', methods=['GET', 'POST']) def register(): if current_user.is_authenticated: return redirect(url_for('main.dashboard')) if request.method == 'POST': username = request.form.get('username') email = request.form.get('email') password = request.form.get('password') confirm_password = request.form.get('confirm_password') full_name = request.form.get('full_name') phone = request.form.get('phone') # E-Sports fields selected_games = request.form.getlist('games') trn_username = request.form.get('trn_username', '').strip() discord_username = request.form.get('discord_username', '').strip() league_os_profile = request.form.get('league_os_profile', '').strip() if password != confirm_password: flash('Passwords do not match.', 'danger') return render_template('pages/register.html', esport_games=ESPORT_GAMES) if User.query.filter_by(username=username).first(): flash('Username already exists.', 'danger') return render_template('pages/register.html', esport_games=ESPORT_GAMES) if User.query.filter_by(email=email).first(): flash('Email already registered.', 'danger') return render_template('pages/register.html', esport_games=ESPORT_GAMES) hashed_password = hash_password(password) user = User( username=username, password_hash=hashed_password, role='player', full_name=full_name, email=email, phone=phone, games=','.join(selected_games) if selected_games else None, trn_username=trn_username or None, discord_username=discord_username or None, league_os_profile=league_os_profile or None ) db.session.add(user) db.session.commit() flash('Your account has been created! You can now log in.', 'success') return redirect(url_for('auth.login')) return render_template('pages/register.html', esport_games=ESPORT_GAMES) @auth_bp.route('/logout') @login_required def logout(): logout_user() flash('You have been logged out.', 'info') return redirect(url_for('auth.login'))