2020-01-27 20:53:18 +01:00
|
|
|
import functools
|
|
|
|
|
2020-01-26 21:24:49 +01:00
|
|
|
from flask import render_template, redirect, url_for, flash, request
|
|
|
|
from flask_login import current_user, login_user, logout_user, login_required
|
2020-01-27 20:53:18 +01:00
|
|
|
from flask_socketio import emit, disconnect
|
2020-01-26 21:24:49 +01:00
|
|
|
from werkzeug.urls import url_parse
|
|
|
|
|
|
|
|
from app import app, socketio
|
|
|
|
from app.forms import LoginForm
|
|
|
|
from app.models import User
|
|
|
|
|
|
|
|
|
2020-01-27 20:53:18 +01:00
|
|
|
def authenticated_only(f):
|
|
|
|
@functools.wraps(f)
|
|
|
|
def wrapped(*args, **kwargs):
|
|
|
|
if not current_user.is_authenticated:
|
|
|
|
disconnect()
|
|
|
|
else:
|
|
|
|
return f(*args, **kwargs)
|
|
|
|
return wrapped
|
|
|
|
|
|
|
|
|
2020-01-26 21:24:49 +01:00
|
|
|
@app.route("/login", methods=["GET", "POST"])
|
|
|
|
def login():
|
|
|
|
if current_user.is_authenticated:
|
|
|
|
return redirect(url_for("index"))
|
|
|
|
form = LoginForm()
|
|
|
|
if form.validate_on_submit():
|
|
|
|
user = User.query.filter_by(username=form.username.data).first()
|
|
|
|
if user is None or not user.check_password(form.password.data):
|
|
|
|
flash("Invalid username or password")
|
|
|
|
return redirect(url_for("login"))
|
|
|
|
login_user(user, remember=form.remember_me.data)
|
|
|
|
next_page = request.args.get("next")
|
|
|
|
if not next_page or url_parse(next_page).netloc != "":
|
|
|
|
next_page = url_for("index")
|
|
|
|
return redirect(next_page)
|
|
|
|
return render_template("login.html", form=form)
|
|
|
|
|
|
|
|
|
|
|
|
@app.route("/logout")
|
|
|
|
def logout():
|
|
|
|
logout_user()
|
|
|
|
return redirect(url_for("index"))
|
|
|
|
|
|
|
|
|
|
|
|
@app.route("/")
|
|
|
|
@app.route("/index")
|
|
|
|
def index():
|
|
|
|
return render_template("test.html")
|
|
|
|
|
|
|
|
|
|
|
|
@app.route("/pc")
|
|
|
|
@login_required
|
2020-01-27 00:22:42 +01:00
|
|
|
def pc():
|
2020-01-26 21:24:49 +01:00
|
|
|
return render_template("pc.html")
|
|
|
|
|
|
|
|
|
2020-01-27 00:22:42 +01:00
|
|
|
@app.route("/stocks")
|
|
|
|
@login_required
|
|
|
|
def stocks():
|
|
|
|
return render_template("stocks.html")
|
|
|
|
|
|
|
|
|
|
|
|
@app.route("/menu")
|
|
|
|
@login_required
|
|
|
|
def menu():
|
|
|
|
return render_template("menu.html")
|
|
|
|
|
|
|
|
|
|
|
|
commands = [
|
|
|
|
{
|
|
|
|
"id": 1,
|
|
|
|
"plate": "sanddwitch",
|
|
|
|
"content": "Jambon - Tomate - Brie",
|
2020-01-27 20:53:18 +01:00
|
|
|
"sauce": "curry",
|
2020-01-27 00:22:42 +01:00
|
|
|
"drink": "Boisson surprise",
|
|
|
|
"dessert": "Panini nutella",
|
|
|
|
"state": "waiting"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"id": 2,
|
|
|
|
"plate": "sanddwitch",
|
|
|
|
"content": "Jambon - Tomate - Brie",
|
2020-01-27 20:53:18 +01:00
|
|
|
"sauce": "bbc",
|
2020-01-27 00:22:42 +01:00
|
|
|
"drink": "Boisson surprise",
|
|
|
|
"dessert": "Panini nutella",
|
|
|
|
"state": "gave"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"id": 3,
|
|
|
|
"plate": "sanddwitch",
|
|
|
|
"content": "Jambon - Tomate - Brie",
|
2020-01-27 20:53:18 +01:00
|
|
|
"sauce": "mayo",
|
2020-01-27 00:22:42 +01:00
|
|
|
"drink": "Boisson surprise",
|
|
|
|
"dessert": "Panini nutella",
|
|
|
|
"state": "error"
|
|
|
|
}
|
|
|
|
]
|
|
|
|
|
|
|
|
|
2020-01-26 21:24:49 +01:00
|
|
|
@socketio.on("connect")
|
2020-01-27 20:53:18 +01:00
|
|
|
@authenticated_only
|
|
|
|
def connect():
|
|
|
|
print("New connection")
|
|
|
|
emit("connect", "ok")
|
|
|
|
|
|
|
|
|
|
|
|
@socketio.on("list command")
|
|
|
|
@authenticated_only
|
|
|
|
def lscmd():
|
|
|
|
emit("list command", {"list": commands, "idcom": len(commands)})
|
2020-01-27 00:22:42 +01:00
|
|
|
|
|
|
|
|
|
|
|
@socketio.on("add command")
|
2020-01-27 20:53:18 +01:00
|
|
|
@authenticated_only
|
2020-01-27 00:22:42 +01:00
|
|
|
def addcmd(json):
|
2020-01-27 20:53:18 +01:00
|
|
|
commands.append({"id": len(commands)+1, "plate": json["plate"], "content": json["content"], "sauce": json["sauce"], "drink": json["drink"], "dessert": json["dessert"], "state": "waiting"})
|
2020-01-27 00:22:42 +01:00
|
|
|
emit("new command", commands[-1], broadcast=True)
|
2020-01-26 21:24:49 +01:00
|
|
|
|
|
|
|
|
2020-01-27 00:22:42 +01:00
|
|
|
@socketio.on("clear command")
|
2020-01-27 20:53:18 +01:00
|
|
|
@authenticated_only
|
2020-01-27 00:22:42 +01:00
|
|
|
def rmcmd(json):
|
|
|
|
for i, c in enumerate(commands):
|
|
|
|
if c["id"] == json["id"]:
|
|
|
|
c["state"] = "waiting"
|
|
|
|
break
|
|
|
|
emit("cleared command", {"id": json["id"]}, broadcast=True)
|
2020-01-26 21:24:49 +01:00
|
|
|
|
|
|
|
|
2020-01-27 00:22:42 +01:00
|
|
|
@socketio.on("give command")
|
2020-01-27 20:53:18 +01:00
|
|
|
@authenticated_only
|
2020-01-27 00:22:42 +01:00
|
|
|
def givecmd(json):
|
|
|
|
for i, c in enumerate(commands):
|
|
|
|
if c["id"] == json["id"]:
|
|
|
|
c["state"] = "gave"
|
|
|
|
break
|
|
|
|
emit("gave command", {"id": json["id"]}, broadcast=True)
|
2020-01-26 21:24:49 +01:00
|
|
|
|
|
|
|
|
2020-01-27 00:22:42 +01:00
|
|
|
@socketio.on("error command")
|
2020-01-27 20:53:18 +01:00
|
|
|
@authenticated_only
|
2020-01-27 00:22:42 +01:00
|
|
|
def errcmd(json):
|
|
|
|
for i, c in enumerate(commands):
|
|
|
|
if c["id"] == json["id"]:
|
|
|
|
c["state"] = "error"
|
|
|
|
break
|
|
|
|
emit("glitched command", {"id": json["id"]}, broadcast=True)
|