diff --git a/DV8-Expo/website/__init__.py b/DV8-Expo/website/__init__.py index f99c735..e2c224b 100644 --- a/DV8-Expo/website/__init__.py +++ b/DV8-Expo/website/__init__.py @@ -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) diff --git a/DV8-Expo/website/config.py b/DV8-Expo/website/config.py index 0a67c42..fe72208 100644 --- a/DV8-Expo/website/config.py +++ b/DV8-Expo/website/config.py @@ -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" diff --git a/DV8-Expo/website/extensions.py b/DV8-Expo/website/extensions.py index 5e479fe..407e190 100644 --- a/DV8-Expo/website/extensions.py +++ b/DV8-Expo/website/extensions.py @@ -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() diff --git a/DV8-Expo/website/models.py b/DV8-Expo/website/models.py index ab0f169..036f688 100644 --- a/DV8-Expo/website/models.py +++ b/DV8-Expo/website/models.py @@ -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) diff --git a/DV8-Expo/website/templates/login.html b/DV8-Expo/website/templates/login.html index 8bec60f..a3d23b1 100644 --- a/DV8-Expo/website/templates/login.html +++ b/DV8-Expo/website/templates/login.html @@ -3,7 +3,7 @@ {% block content %}
- {% with messages = get_flashed_messages(with_categories=true) %} + {% with messages = get_flashed_messages() %} {% if messages %} {% for message in messages %}

{{ message }}

@@ -12,8 +12,9 @@

Do not share your UUID

{% endif %} {% endwith %} -
- + + {{ form.csrf_token }} + {{ form.uuid(size=36) }}
diff --git a/docker-compose.yml b/docker-compose.yml index ccea5fb..0d3b971 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -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: