Add login/logout routes

This commit is contained in:
Yusur 2022-11-12 11:15:06 +01:00
parent d45d5c4284
commit 00bd1128d1
8 changed files with 107 additions and 12 deletions

46
app.py
View file

@ -15,8 +15,9 @@ Application is kept compact, with all its core in a single file.
from flask import (
Flask, Markup, abort, flash, g, jsonify, make_response, redirect, request,
render_template, send_from_directory)
from flask_login import LoginManager
from flask_login import LoginManager, login_user, logout_user
from flask_wtf import CSRFProtect
from werkzeug.security import generate_password_hash, check_password_hash
from werkzeug.routing import BaseConverter
from peewee import *
from playhouse.db_url import connect as dbconnect
@ -425,13 +426,16 @@ login_manager = LoginManager(app)
@app.before_request
def _before_request():
for l in request.headers.get('accept-language', 'it,en').split(','):
if ';' in l:
l, _ = l.split(';')
lang = l
break
if request.args.get('uselang') is not None:
lang = request.args['uselang']
else:
lang = 'en'
for l in request.headers.get('accept-language', 'it,en').split(','):
if ';' in l:
l, _ = l.split(';')
lang = l
break
else:
lang = 'en'
g.lang = lang
@app.context_processor
@ -766,6 +770,8 @@ def stats():
revision_count=PageRevision.select().count()
)
## account management ##
@app.route('/accounts/theme-switch')
def theme_switch():
cook = request.cookies.get('dark')
@ -773,6 +779,32 @@ def theme_switch():
resp.set_cookie('dark', '0' if cook == '1' else '1', max_age=31556952, path='/')
return resp
@app.route('/accounts/login/', methods=['GET','POST'])
def accounts_login():
if request.method == 'POST':
try:
username = request.form['username']
user = User.get(User.username == username)
if not check_password_hash(user.password, request.form['password']):
flash('Invalid username or password.')
return render_template('login.html')
except User.DoesNotExist:
flash('Invalid username or password.')
else:
remember_for = int(request.form['remember'])
if remember_for > 0:
login_user(user, remember=True,
duration=datetime.timedelta(days=remember_for))
else:
login_user(user)
return redirect(request.args.get('next', '/'))
return render_template('login.html')
@app.route('/accounts/logout/')
def accounts_logout():
logout_user()
return redirect(request.args.get('next', '/'))
## easter egg (lol) ##
MNeaster = {