Adding login system

This commit is contained in:
Michał Gdula 2023-05-16 17:50:26 +03:00
parent 36be8993df
commit 27bf6f64ef
6 changed files with 51 additions and 11 deletions

View file

@ -1,8 +1,18 @@
from flask import Flask, render_template
from flask import Flask, render_template, request, redirect, flash
from flask_login import login_required, login_user, logout_user, current_user
from flask_assets import Bundle
from website.extensions import db, migrate, assets
from flask_wtf import FlaskForm
from wtforms import StringField
from wtforms.validators import DataRequired
from website.models import Users
from website.extensions import db, migrate, login_manager, assets
from website.config import INSTANCE_DIR, MIGRATION_DIR
class LoginForm(FlaskForm):
uuid = StringField('uuid', validators=[DataRequired()], render_kw={"placeholder": "12345678-ABCD-ABCD-ABCD-123456789EFG"})
app = Flask(__name__, instance_path=INSTANCE_DIR)
app.config.from_pyfile('config.py')
@ -18,10 +28,25 @@ scripts = Bundle('js/*.js', filters='jsmin', output='gen/packed.js')
assets.register('scripts', scripts)
@login_manager.user_loader
def load_user(user_id):
return Users.get(user_id)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/login')
@app.route('/login', methods=["GET", "POST"])
def login():
return render_template('login.html')
form = LoginForm()
if form.validate_on_submit():
if user := Users.query.filter_by(uuid=str(form.uuid)).first():
login_user(user, remember=True)
return redirect(index)
else:
flash("Inncorrect login")
return render_template('login.html', form=form)

View file

@ -1,3 +1,12 @@
import os
# Purely to make the code a bit more readable
def env(key):
return os.getenv(key)
SECRET_KEY = env("FLASK_KEY")
SQLALCHEMY_DATABASE_URI = 'sqlite:///site.db'
MIGRATION_DIR = "/data/storage/migrations"

View file

@ -1,9 +1,11 @@
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
from flask_login import LoginManager
from flask_caching import Cache
from flask_assets import Environment
db = SQLAlchemy()
migrate = Migrate()
cache = Cache()
login_manager = LoginManager()
cache = Cache(config={"CACHE_TYPE": "simple"})
assets = Environment()

View file

@ -2,6 +2,7 @@
Database models for the server
"""
from website.extensions import db
from flask_login import UserMixin
class Games(db.Model):
@ -34,6 +35,6 @@ class Authors(db.Model):
game_id = db.Column(db.Integer, db.ForeignKey('games.id'))
class Users(db.Model):
class Users(db.Model, UserMixin):
id = db.Column(db.Integer, primary_key=True)
uuid = db.Column(db.String, nullable=False)

View file

@ -3,7 +3,7 @@
{% block content %}
<section class="center">
<div class="login">
{% with messages = get_flashed_messages(with_categories=true) %}
{% with messages = get_flashed_messages() %}
{% if messages %}
{% for message in messages %}
<p>{{ message }}</p>
@ -12,8 +12,9 @@
<p>Do not share your UUID</p>
{% endif %}
{% endwith %}
<form action="{{ url_for('login') }}" method="post">
<input type="text" name="uuid" placeholder="AAAAA-BBBBB-CCCC-12345" required>
<form action="{{ url_for('login') }}" method="POST">
{{ form.csrf_token }}
{{ form.uuid(size=36) }}
<button type="submit">Login</button>
</form>
</div>

View file

@ -5,8 +5,8 @@ services:
image: caddy:alpine
restart: unless-stopped
ports:
- 80:80
- 443:443
# - "80:80"
- "443:443"
volumes:
- ./Caddy/Caddyfile:/etc/caddy/Caddyfile
- ./Caddy/data:/data
@ -21,6 +21,8 @@ services:
db:
image: postgres:alpine
restart: unless-stopped
# ports:
# - "5432:5432"
volumes:
- ./Postgres/data:/var/lib/postgresql/data
environment: