from datetime import datetime from flask import Blueprint, flash, make_response, redirect, render_template, request, url_for, session from flask_login import current_user, login_required, login_user, logout_user from app.forms.auth import LoginForm from app.extensions import db from app.models.user import User bp = Blueprint('auth', __name__, url_prefix='/auth') @bp.route('/login', methods=['GET', 'POST']) def login(): if current_user.is_authenticated: return redirect(url_for('dashboard.index')) form = LoginForm() response = None if form.validate_on_submit(): user = User.query.filter_by(email=form.email.data.lower()).first() if user and user.check_password(form.password.data): if user.is_blocked: flash('Konto użytkownika jest zablokowane.', 'danger') else: login_user(user) user.last_login_at = datetime.utcnow() first_company = user.companies()[0] if user.companies() else None if first_company: session['current_company_id'] = first_company.id db.session.commit() flash('Zalogowano pomyślnie.', 'success') response = make_response(redirect(request.args.get('next') or url_for('dashboard.index'))) response.set_cookie('theme', user.theme_preference or 'light', max_age=31536000, samesite='Lax') return response else: flash('Błędny login lub hasło.', 'danger') theme = request.cookies.get('theme', 'light') return render_template('auth/login.html', form=form, theme=theme) @bp.route('/logout') @login_required def logout(): theme = current_user.theme_preference or request.cookies.get('theme', 'light') logout_user() session.pop('current_company_id', None) flash('Wylogowano.', 'info') response = make_response(redirect(url_for('auth.login'))) response.set_cookie('theme', theme, max_age=31536000, samesite='Lax') return response