49 lines
2.0 KiB
Python
49 lines
2.0 KiB
Python
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
|