import os from typing import Union from flask import (Flask, flash, redirect, render_template, request, send_from_directory, url_for) from flask_login import LoginManager, login_required, login_user, logout_user from forms import LoginForm from latosa import LaToSa from user import User app = Flask(__name__) app.config.update( SECRET_KEY=os.urandom(32), SESSION_COOKIE_HTTPONLY=True, REMEMBER_COOKIE_HTTPONLY=True, SESSION_COOKIE_SAMESITE="Strict", ) login_manager = LoginManager() login_manager.init_app(app) latosa = LaToSa(app) @login_manager.user_loader def load_user(user_id) -> Union[User, None]: for user in latosa.get_users(): if user.uid == user_id: return user return None @app.route('/', methods=['GET', 'POST']) def index(): i18n = latosa.get_i18n(request) form = LoginForm() if request.method == 'POST': username = form.username.data password = form.password.data user = latosa.login_user(username, password) if user: login_user(user) flash(i18n['login']['success']) return redirect(url_for('admin')) flash(i18n['login']['failed']) return render_template('index.html', i18n=i18n, form=form) @app.route('/admin', methods=['GET']) @login_required def admin(): i18n = latosa.get_i18n(request) return render_template('admin.html', i18n=i18n) @app.route('/favicon.ico') def favicon(): return send_from_directory(os.path.join(app.root_path, 'static'), 'favicon.ico', mimetype='image/vnd.microsoft.icon')