latosa/app.py

61 lines
1.6 KiB
Python
Raw Normal View History

2024-03-02 16:15:54 +01:00
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
2024-03-02 16:34:15 +01:00
from latosa import LaToSa
2024-03-02 16:15:54 +01:00
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)
2024-03-02 16:34:15 +01:00
latosa = LaToSa(app)
2024-03-02 16:15:54 +01:00
@login_manager.user_loader
def load_user(user_id) -> Union[User, None]:
2024-03-02 16:34:15 +01:00
for user in latosa.get_users():
2024-03-02 16:15:54 +01:00
if user.uid == user_id:
return user
return None
@app.route('/', methods=['GET', 'POST'])
def index():
2024-03-02 16:34:15 +01:00
i18n = latosa.get_i18n(request)
2024-03-02 16:15:54 +01:00
form = LoginForm()
if request.method == 'POST':
username = form.username.data
password = form.password.data
2024-03-02 16:34:15 +01:00
user = latosa.login_user(username, password)
2024-03-02 16:15:54 +01:00
if user:
login_user(user)
2024-03-02 16:34:15 +01:00
flash(i18n['login']['success'])
2024-03-02 16:15:54 +01:00
return redirect(url_for('admin'))
2024-03-02 16:34:15 +01:00
flash(i18n['login']['failed'])
2024-03-02 16:15:54 +01:00
return render_template('index.html', i18n=i18n, form=form)
@app.route('/admin', methods=['GET'])
@login_required
def admin():
2024-03-02 16:34:15 +01:00
i18n = latosa.get_i18n(request)
2024-03-02 16:15:54 +01:00
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')