mirror of
https://github.com/Fluffy-Bean/GameExpo23.git
synced 2025-05-22 19:14:53 +00:00
Yeet expo page
Fix score uploading
This commit is contained in:
parent
85a329ad6d
commit
a93a8cf04d
40 changed files with 109 additions and 1247 deletions
|
@ -7,7 +7,7 @@ from werkzeug.exceptions import HTTPException
|
|||
from server.extensions import db, migrate, cache, assets, login_manager
|
||||
from server.models import Users
|
||||
from server.config import MIGRATION_DIR, INSTANCE_DIR
|
||||
from server import views, auth, api
|
||||
from server import views, auth, api, filters
|
||||
|
||||
|
||||
app = Flask(__name__, instance_path=INSTANCE_DIR)
|
||||
|
@ -39,6 +39,7 @@ cache.init_app(app)
|
|||
app.register_blueprint(views.blueprint)
|
||||
app.register_blueprint(auth.blueprint)
|
||||
app.register_blueprint(api.blueprint)
|
||||
app.register_blueprint(filters.blueprint)
|
||||
|
||||
|
||||
@login_manager.user_loader
|
||||
|
|
|
@ -43,39 +43,34 @@ def tokens():
|
|||
|
||||
@blueprint.route("/post", methods=["POST"])
|
||||
def post():
|
||||
form = request.form
|
||||
error = []
|
||||
session_key = request.form.get("session", None)
|
||||
version = request.form.get("version", "alpha")
|
||||
difficulty = request.form.get("difficulty", 0)
|
||||
score = request.form.get("score", 0)
|
||||
|
||||
if not form:
|
||||
error.append("No form data provided!")
|
||||
if not form["session"]:
|
||||
error.append("No session key provided!")
|
||||
if not form["version"]:
|
||||
error.append("No version provided!")
|
||||
|
||||
if error:
|
||||
return jsonify(error), 400
|
||||
if not session_key:
|
||||
return "No session key provided!"
|
||||
if not score:
|
||||
return "Score is not valid!"
|
||||
|
||||
try:
|
||||
int(form["score"])
|
||||
int(form["difficulty"])
|
||||
float(score)
|
||||
int(difficulty)
|
||||
except TypeError:
|
||||
error.append("Invalid score and difficulty must be valid numbers!")
|
||||
return "Invalid score and difficulty must be valid numbers!"
|
||||
|
||||
if int(form["difficulty"]) not in GAME_DIFFICULTIES:
|
||||
error.append("Invalid difficulty!")
|
||||
if int(difficulty) not in GAME_DIFFICULTIES:
|
||||
return "Invalid difficulty!"
|
||||
|
||||
session_data = Sessions.query.filter_by(auth_key=form["session"]).first()
|
||||
|
||||
session_data = Sessions.query.filter_by(auth_key=session_key).first()
|
||||
if not session_data:
|
||||
error.append("Authentication failed!")
|
||||
|
||||
if error:
|
||||
return jsonify(error), 400
|
||||
return "Authentication failed!"
|
||||
|
||||
score = Scores(
|
||||
score=int(form["score"]),
|
||||
difficulty=int(form["difficulty"]),
|
||||
version=form["version"],
|
||||
score=float(score),
|
||||
difficulty=int(difficulty),
|
||||
version=version,
|
||||
user_id=session_data.user_id,
|
||||
)
|
||||
|
||||
|
|
|
@ -82,7 +82,7 @@ def login():
|
|||
if error:
|
||||
for err in error:
|
||||
flash(err, "error")
|
||||
return redirect(url_for("auth.account"))
|
||||
return redirect(url_for("views.account"))
|
||||
|
||||
login_user(user, remember=True)
|
||||
flash("Successfully logged in!", "success")
|
||||
|
|
13
TFR/server/filters.py
Normal file
13
TFR/server/filters.py
Normal file
|
@ -0,0 +1,13 @@
|
|||
import datetime
|
||||
from flask import Blueprint
|
||||
|
||||
|
||||
blueprint = Blueprint('filters', __name__, template_folder='templates')
|
||||
|
||||
|
||||
@blueprint.app_template_filter()
|
||||
def format_result(dttm):
|
||||
dttm = str(dttm).split('.')
|
||||
time = datetime.timedelta(seconds=int(dttm[0]))
|
||||
microtime = dttm[1][:3]
|
||||
return f'{time}:{microtime}'
|
|
@ -16,9 +16,11 @@ class Scores(db.Model):
|
|||
"""
|
||||
|
||||
id = db.Column(db.Integer, primary_key=True)
|
||||
user_id = db.Column(db.Integer, db.ForeignKey("users.id", use_alter=True))
|
||||
|
||||
score = db.Column(db.Float, nullable=False)
|
||||
difficulty = db.Column(db.Integer, nullable=False)
|
||||
|
||||
scored_at = db.Column(
|
||||
db.DateTime,
|
||||
nullable=False,
|
||||
|
@ -31,7 +33,6 @@ class Scores(db.Model):
|
|||
)
|
||||
|
||||
version = db.Column(db.String, default=GAME_VERSION)
|
||||
user_id = db.Column(db.Integer, db.ForeignKey("users.id", use_alter=True))
|
||||
|
||||
|
||||
class Sessions(db.Model):
|
||||
|
@ -41,9 +42,11 @@ class Sessions(db.Model):
|
|||
|
||||
id = db.Column(db.Integer, primary_key=True)
|
||||
user_id = db.Column(db.Integer, db.ForeignKey("users.id", use_alter=True))
|
||||
|
||||
auth_key = db.Column(db.String, nullable=False, unique=True)
|
||||
ip_address = db.Column(db.String)
|
||||
device_type = db.Column(db.String)
|
||||
|
||||
created_at = db.Column(
|
||||
db.DateTime,
|
||||
nullable=False,
|
||||
|
@ -56,14 +59,14 @@ class Sessions(db.Model):
|
|||
)
|
||||
|
||||
|
||||
class Reset(db.Model):
|
||||
class PasswordReset(db.Model):
|
||||
"""
|
||||
Password reset table
|
||||
"""
|
||||
|
||||
id = db.Column(db.Integer, primary_key=True)
|
||||
|
||||
user_id = db.Column(db.Integer, db.ForeignKey("users.id", use_alter=True))
|
||||
|
||||
reset_key = db.Column(db.String, nullable=False, unique=True)
|
||||
|
||||
created_at = db.Column(
|
||||
|
@ -73,6 +76,36 @@ class Reset(db.Model):
|
|||
)
|
||||
|
||||
|
||||
class Permissions(db.Model):
|
||||
"""
|
||||
Permissions table
|
||||
"""
|
||||
|
||||
id = db.Column(db.Integer, primary_key=True)
|
||||
user_id = db.Column(db.Integer, db.ForeignKey("users.id", use_alter=True))
|
||||
|
||||
user_ban = db.Column(db.Boolean, default=False)
|
||||
user_warn = db.Column(db.Boolean, default=False)
|
||||
|
||||
score_removal = db.Column(db.Boolean, default=False)
|
||||
score_edit = db.Column(db.Boolean, default=False)
|
||||
|
||||
admin_panel = db.Column(db.Boolean, default=False)
|
||||
admin_promote = db.Column(db.Boolean, default=False)
|
||||
admin_demote = db.Column(db.Boolean, default=False)
|
||||
|
||||
|
||||
class ProfileTags(db.Model):
|
||||
"""
|
||||
Profile Tags table
|
||||
"""
|
||||
|
||||
id = db.Column(db.Integer, primary_key=True)
|
||||
user_id = db.Column(db.Integer, db.ForeignKey("users.id", use_alter=True))
|
||||
|
||||
tag = db.Column(db.String, nullable=False)
|
||||
|
||||
|
||||
class Users(db.Model, UserMixin):
|
||||
"""
|
||||
User table
|
||||
|
@ -93,6 +126,8 @@ class Users(db.Model, UserMixin):
|
|||
|
||||
scores = db.relationship("Scores", backref=db.backref("users", lazy=True))
|
||||
tokens = db.relationship("Sessions", backref=db.backref("users", lazy=True))
|
||||
reset = db.relationship("PasswordReset", backref=db.backref("users", lazy=True))
|
||||
tags = db.relationship("ProfileTags", backref=db.backref("users", lazy=True))
|
||||
|
||||
def get_id(self):
|
||||
return str(self.alt_id)
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
{% extends "base.html" %}
|
||||
{% block content %}
|
||||
<h2>What is The Front Rooms?</h2>
|
||||
<h2>Project Redacted</h2>
|
||||
<p>The Front Rooms is a game based on The Backrooms Genre of games.</p>
|
||||
|
||||
<h2>Is my data secured?</h2>
|
||||
<p>Yes, all passwords and emails are hashed and salted, and at no point stored in plain text.</p>
|
||||
{% endblock %}
|
|
@ -6,12 +6,12 @@
|
|||
<form action="{{ url_for('auth.login') }}" method="POST">
|
||||
<span class="text-input">
|
||||
<label for="login-username">Username</label>
|
||||
<input type="text" name="username" placeholder="Jerry" id="login-username" required>
|
||||
<input type="text" name="username" id="login-username" required>
|
||||
</span>
|
||||
|
||||
<span class="text-input">
|
||||
<label for="login-password">Password</label>
|
||||
<input type="password" name="password" placeholder="password123" id="login-password" required>
|
||||
<input type="password" name="password" id="login-password" required>
|
||||
</span>
|
||||
|
||||
<button type="submit" class="button primary">Login</button>
|
||||
|
@ -24,17 +24,17 @@
|
|||
<form action="{{ url_for('auth.register') }}" method="POST">
|
||||
<span class="text-input">
|
||||
<label for="register-username">Username</label>
|
||||
<input type="text" name="username" placeholder="Jerry" id="register-username" required>
|
||||
<input type="text" name="username" id="register-username" required>
|
||||
</span>
|
||||
|
||||
<span class="text-input">
|
||||
<label for="register-email">Username</label>
|
||||
<input type="text" name="email" placeholder="jerry@example.com" id="register-email" required>
|
||||
<label for="register-email">Email</label>
|
||||
<input type="text" name="email" id="register-email" required>
|
||||
</span>
|
||||
|
||||
<span class="text-input">
|
||||
<label for="register-password">Password</label>
|
||||
<input type="password" name="password" placeholder="password123" id="register-password" required>
|
||||
<input type="password" name="password" id="register-password" required>
|
||||
</span>
|
||||
|
||||
<button type="submit" class="button primary">Register</button>
|
||||
|
|
|
@ -12,10 +12,12 @@
|
|||
</select>
|
||||
|
||||
<select name="ver" class="button">
|
||||
<option value="alpha" {% if ver=="alpha" %}selected{% endif %}>Alpha</option>
|
||||
<option value="beta" {% if ver=="beta" %}selected{% endif %}>Beta</option>
|
||||
<option value="1.0" {% if ver=="1.0" %}selected{% endif %}>1.0</option>
|
||||
<option value="1.1" {% if ver=="1.1" %}selected{% endif %}>1.1</option>
|
||||
{% for game_version in config["GAME_VERSIONS"] %}
|
||||
<option
|
||||
value="{{ game_version }}"
|
||||
{% if ver==game_version %}selected{% endif %}
|
||||
>{{ game_version }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
|
||||
<span class="text-input">
|
||||
|
@ -56,7 +58,7 @@
|
|||
<td>{{ score.users.username }}</td>
|
||||
{% endif %}
|
||||
|
||||
<td>{{ score.score }}</td>
|
||||
<td>{{ score.score | format_result }}</td>
|
||||
<td>{{ score.scored_at.strftime('%Y-%m-%d') }}</td>
|
||||
<!-- <td>{{ score.version }}</td> -->
|
||||
</tr>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue