mirror of
https://github.com/lucaspalomodevelop/Party.git
synced 2026-03-13 00:07:21 +00:00
commit
4855daff12
1
Config/README.md
Normal file
1
Config/README.md
Normal file
@ -0,0 +1 @@
|
||||
Config Dateien
|
||||
1
Config/log/README.md
Normal file
1
Config/log/README.md
Normal file
@ -0,0 +1 @@
|
||||
Log Dateien
|
||||
14
Config/party.sql
Normal file
14
Config/party.sql
Normal file
@ -0,0 +1,14 @@
|
||||
PRAGMA foreign_keys=ON;
|
||||
CREATE TABLE user (userID INTEGER PRIMARY KEY,username TEXT, sessionID INTEGER NOT NULL, info TEXT);
|
||||
CREATE TABLE seession (sessionID INTEGER PRIMARY KEY, sessionname TEXT, sessionstatus TEXT, seessiontyp TEXT, sessionstartzei TEXT);
|
||||
CREATE TABLE chat (sessionID INTEGER, userID INTEGER, chatmessage TEXT, ZEIT TEXT);
|
||||
CREATE TABLE game (sessionID INTEGER, userID INTEGER, Spielname TEXT, Spielaktivität TEXT, ZEIT TEXT);
|
||||
CREATE TABLE pointgame (sessionID INTEGER, userID INTEGER, Spielname TEXT, Spielaktivität TEXT, Punkte INTEGER);
|
||||
CREATE TABLE uploadgame (sessionID INTEGER, userID INTEGER, Spielname TEXT, Spielstand TEXT);
|
||||
CREATE TABLE planer (eventid INTEGER PRIMARY KEY not NULL,eventname TEXT, eventzeit TEXT, sessionID INTEGER, eventstatus TEXT);
|
||||
CREATE TABLE mate (matename TEXT, mateanzahl INTEGER, sessionID INTEGER);
|
||||
CREATE TABLE mws (matekisten INTEGER, sessionID INTEGER NOT NULL);
|
||||
CREATE TABLE spiel (spielname TEXT, Genre TEXT, Erscheinungsjahr TEXT, Gruppe TEXT, Teil INTEGER, sessionID INTEGER NOT NULL, Bildname TEXT);
|
||||
CREATE TABLE dateien (dateiID INTEGER PRIMARY KEY NOT NULL, dateiname TEXT, sessionID INTEGER);
|
||||
CREATE TABLE musikMetaDaten (songID INTEGER PRIMARY KEY Not NULL, artist TEXT, band TEXT, album TEXT, title TEXT, track TEXT, genre TEXT, composer TEXT, copyright TEXT, comment TEXT, releasedate TEXT, mp3_url TEXT, sessionID INTEGER, bildname TEXT);
|
||||
CREATE TABLE queue (songID INTEGER, sessionID INTEGER)
|
||||
1
Export/README.md
Normal file
1
Export/README.md
Normal file
@ -0,0 +1 @@
|
||||
Hier können Exportierte Sessions gefunden werden
|
||||
@ -10,5 +10,11 @@ Dies ist eine Software für Lan Partys
|
||||
|
||||
## Server starten
|
||||
+ Clonen `git clone https://github.com/fingadumbledore/Party`
|
||||
|
||||
### Nativ:
|
||||
+ Wechseln`cd Party`
|
||||
+ starten`./run.sh`
|
||||
|
||||
### Mit Nix
|
||||
+ `nix-shell`
|
||||
+ `bash run.sh`
|
||||
|
||||
448
main.py
448
main.py
@ -1,436 +1,30 @@
|
||||
from flask import Flask, render_template, jsonify, request, session, redirect
|
||||
from picker import picker as pick
|
||||
import sqlite3
|
||||
import os
|
||||
import time
|
||||
import qrcode
|
||||
import shutil
|
||||
import argparse
|
||||
import ArgumentParser
|
||||
from server import server
|
||||
|
||||
starttime = 0
|
||||
user_count = 0
|
||||
userid = 0
|
||||
app = Flask(__name__, template_folder='templates/')
|
||||
date = time.strftime("%d-%m-%Y %H:%M:%S", time.localtime(time.time()))
|
||||
zeit = time.strftime("%H%M", time.localtime(time.time()))
|
||||
log = date
|
||||
app.config['SECRET_KEY'] = 'party'
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(
|
||||
prog = 'Party Controller',
|
||||
description = 'Manage Lan parties',
|
||||
epilog = 'thanks for using')
|
||||
|
||||
parser.add_argument('-s', '--start', action='store_true', help="startet Server")
|
||||
parser.add_argument('-l', '--load', action='store_true', help="lädt alte Session")
|
||||
parser.add_argument('-o', '--output', action='store_true', help="setzt output Pfad")
|
||||
|
||||
def dbcon(sql):
|
||||
con = sqlite3.connect("party.db")
|
||||
warning_log("verbindung mit db wurde aufgenommen")
|
||||
cur = con.cursor()
|
||||
cur.execute(sql)
|
||||
con.commit()
|
||||
return sql.fetchall()
|
||||
args = parser.parse_args()
|
||||
|
||||
if args.start:
|
||||
server()
|
||||
|
||||
def dbcon1(sql):
|
||||
con = sqlite3.connect("party.db")
|
||||
cur = con.cursor()
|
||||
return cur.execute(sql)
|
||||
elif args.load:
|
||||
server()
|
||||
|
||||
|
||||
def uptime():
|
||||
time = int(zeit)
|
||||
uptime = time - starttime
|
||||
return uptime
|
||||
|
||||
|
||||
# log system
|
||||
def log_server(log):
|
||||
log = date + log
|
||||
datei = open('server.log', 'a')
|
||||
datei.write('\n' + " " + log)
|
||||
log = date
|
||||
datei.close()
|
||||
|
||||
|
||||
def error_log(error):
|
||||
error = date + " [ERROR]" + error
|
||||
datei = open('server.log', 'a')
|
||||
datei.write('\n' + " " + error)
|
||||
log = date
|
||||
datei.close()
|
||||
|
||||
|
||||
def problem_log(problem):
|
||||
problem = date + " [PROBLEM]" + problem
|
||||
datei = open('server.log', 'a')
|
||||
datei.write('\n' + " " + problem)
|
||||
log = date
|
||||
datei.close()
|
||||
|
||||
|
||||
def warning_log(warning):
|
||||
warning = date + " [WARNING]" + warning
|
||||
datei = open('server.log', 'a')
|
||||
datei.write('\n' + " " + warning)
|
||||
log = date
|
||||
datei.close()
|
||||
|
||||
|
||||
# Qr-code generator#
|
||||
def create_qr(id):
|
||||
if not os.path.exists("./static/img/qr.png"):
|
||||
img = qrcode.make(f'127.0.0.1:5000/session/{id}')
|
||||
type(img)
|
||||
img.save("./static/img/qr.png")
|
||||
else:
|
||||
warning_log("QR-Code ist bereits vorhanden")
|
||||
|
||||
|
||||
# Hauptseite
|
||||
@app.route("/")
|
||||
def index():
|
||||
log_server("called /")
|
||||
return render_template("index.html")
|
||||
|
||||
|
||||
# Neue Nachrichten
|
||||
@app.route("/get_chat", methods=['POST'])
|
||||
def get_chat():
|
||||
if session:
|
||||
log_server("called /get_chat")
|
||||
log_server("called /get_chat with POST")
|
||||
userID = request.form['userid']
|
||||
sessionID = request.form['sessionid']
|
||||
message = request.form['message']
|
||||
zeit = date
|
||||
l = f"INSERT INTO seession (sessionname, sesionstatus, seessiontyp) VALUES( \'{sessionID}\', \'{userID}\',\'{message}\', \'{zeit}\');"
|
||||
log_server("neue Nachricht")
|
||||
try:
|
||||
dbcon(l)
|
||||
log_server("message entered successfully")
|
||||
|
||||
except e:
|
||||
error_log("unable to get new Messages")
|
||||
account = cur.fetchone()
|
||||
return render_template("chat.html")
|
||||
else:
|
||||
warning_log(" called /get_chat without being logged in")
|
||||
return "{ \"message\": \"you need to login\"'}"
|
||||
|
||||
|
||||
@app.route("/get_game_file", methods=['POST'])
|
||||
def get_game_file():
|
||||
log_server("called /get_game_file")
|
||||
pick()
|
||||
|
||||
|
||||
@app.route("/get_new_message")
|
||||
def get_new_message():
|
||||
if session:
|
||||
log_server("called /get_new_message")
|
||||
return render_template("chat.html")
|
||||
else:
|
||||
warning_log(" called /get_new_message without being logged in")
|
||||
return render_template('passwd.html')
|
||||
|
||||
|
||||
@app.route("/message")
|
||||
def message():
|
||||
if session:
|
||||
log_server("called /message")
|
||||
return render_template("message.html")
|
||||
else:
|
||||
warning_log(" called /message without being logged in")
|
||||
return render_template('passwd.html')
|
||||
|
||||
|
||||
# planer
|
||||
@app.route("/get_planer", methods=['POST'])
|
||||
def get_planer():
|
||||
if session:
|
||||
log_server("called /get_planer")
|
||||
log_server("called /get_planer with POST")
|
||||
event = request.form['event']
|
||||
sessionID = request.form['sessionID']
|
||||
zeit = request.form['zeit']
|
||||
pfad = "/session/" + sessionID
|
||||
l = f"INSERT INTO planer VALUES( \'{event}\', \'{zeit}\', \'{sessionID}\');"
|
||||
log_server("neues Event")
|
||||
try:
|
||||
con = sqlite3.connect("party.db")
|
||||
warning_log("verbindung mit db wurde aufgenommen")
|
||||
cur = con.cursor()
|
||||
cur.execute(l)
|
||||
con.commit()
|
||||
con.close()
|
||||
log_server("event entered successfully /get_planer")
|
||||
except e:
|
||||
error_log("unable to insert event")
|
||||
return redirect(f'/session/{sessionID}')
|
||||
elif args.output:
|
||||
print("schön für dich")
|
||||
|
||||
else:
|
||||
warning_log(" called /get_planer without being logged in")
|
||||
return render_template('404.html')
|
||||
parser.print_help()
|
||||
|
||||
|
||||
@app.route("/session/<id>")
|
||||
def session(id):
|
||||
if session:
|
||||
log_server(f"called /session/{id}")
|
||||
con = sqlite3.connect("party.db")
|
||||
cur = con.cursor()
|
||||
l = f"SELECT eventname, eventzeit FROM planer WHERE sessionID = \'{id}\' ORDER BY eventzeit;"
|
||||
asd = cur.execute(l).fetchall()
|
||||
con.commit()
|
||||
cur.close()
|
||||
|
||||
con = sqlite3.connect("party.db")
|
||||
warning_log("Verbindung mit Datenbank wurde aufgenommen /seession")
|
||||
cur = con.cursor()
|
||||
creator = cur.execute("SELECT username FROM user WHERE info = 'creator'").fetchall()
|
||||
cur.close()
|
||||
|
||||
con = sqlite3.connect("party.db")
|
||||
warning_log("Verbindung mit Datenbank wurde aufgenommen /seession")
|
||||
cur = con.cursor()
|
||||
mate = cur.execute("SELECT matename, mateanzahl FROM mate WHERE sessionID = \'{id}\';").fetchall()
|
||||
cur.close()
|
||||
|
||||
con = sqlite3.connect("party.db")
|
||||
cur = con.cursor()
|
||||
l = f"SELECT userID, Spielname, Spielaktivität, ZEIT FROM game WHERE sessionID = \'{id}\' ORDER BY ZEIT;"
|
||||
game = cur.execute(l).fetchall()
|
||||
con.commit()
|
||||
cur.close()
|
||||
|
||||
return render_template("session.html", asd=asd, game=game,
|
||||
das=user_count, er=creator, mate=mate,
|
||||
der=uptime())
|
||||
else:
|
||||
warning_log(" called /session without being logged in")
|
||||
return render_template('passwd.html')
|
||||
|
||||
|
||||
def mate_logik(sorte, anzahl):
|
||||
anzahl = anzahl + 1
|
||||
koffeingehalt = 0
|
||||
match sorte:
|
||||
case "Mio Mio":
|
||||
koffeingehalt =
|
||||
|
||||
|
||||
@app.route("/mate", methods=['POST'])
|
||||
def mate():
|
||||
log_server("called /mate")
|
||||
|
||||
if session:
|
||||
mateFlaschen = request.form['mateFlaschen']
|
||||
sessionId = request.form['sessionID']
|
||||
mateSorte = request.form['mateSorte']
|
||||
mateSql = f"INSERT INTO mate VALUES (\"{mateSorte}\", \'{mateFlaschen}\', \'{sessionId}\');"
|
||||
try:
|
||||
con = sqlite3.connect("party.db")
|
||||
warning_log("Verbindung mit Datenbank wurde aufgenommen /mate")
|
||||
cur = con.cursor()
|
||||
cur.execute(mateSql)
|
||||
con.commit()
|
||||
con.close()
|
||||
|
||||
mate_logik(mateSorte, mateFlaschen)
|
||||
log_server("mate wurde in Datenbank eingefügt")
|
||||
except sqlite3.Error as e:
|
||||
error_log(f"error while executing sql: {e}")
|
||||
return redirect(f'/session/{sessionId}')
|
||||
else:
|
||||
warning_log(" called /mate without being logged in")
|
||||
return render_template('/passwd')
|
||||
|
||||
@app.route("/logout")
|
||||
def logout():
|
||||
log_server("called /logout")
|
||||
user_count = -1
|
||||
return render_template("logout.html")
|
||||
|
||||
@app.route("/signin")
|
||||
def signin():
|
||||
log_server("called /signin")
|
||||
return render_template("signin.html")
|
||||
|
||||
@app.route("/password")
|
||||
def password():
|
||||
log_server("called /password")
|
||||
return render_template("passwort_ver.html")
|
||||
|
||||
@app.route("/create_session")
|
||||
def create_session():
|
||||
log_server("called /create_session")
|
||||
return render_template("createSession.html")
|
||||
|
||||
@app.route("/get_creat_session", methods=['POST'])
|
||||
def get_creat_session():
|
||||
log_server("called /get_creat_session with POST")
|
||||
sessionname = request.form['sessionname']
|
||||
sessionID = request.form['sessionid']
|
||||
l = f"INSERT INTO seession (sessionname, sessionstatus, seessiontyp) VALUES( \'{sessionname}\', 'online','public');"
|
||||
log_server("neue Session")
|
||||
try:
|
||||
con = sqlite3.connect("party.db")
|
||||
warning_log("verbindung mit db wurde aufgenommen")
|
||||
cur = con.cursor()
|
||||
cur.execute(l)
|
||||
con.commit()
|
||||
con.close()
|
||||
|
||||
try:
|
||||
con = sqlite3.connect("party.db")
|
||||
warning_log("verbindung mit db wurde aufgenommen")
|
||||
cur = con.cursor()
|
||||
username = "Host"
|
||||
usertype = "admin"
|
||||
userId = 1
|
||||
l = f"INSERT INTO user (username, sessionID, info) VALUES (\'{username}\', {sessionID}, \'{usertype}\');"
|
||||
cur.execute(l)
|
||||
con.commit()
|
||||
con.close()
|
||||
except:
|
||||
warning_log("user admin konnte nicht angelegt werden")
|
||||
|
||||
user_count = +1
|
||||
starttime = int(zeit)
|
||||
create_qr(sessionID)
|
||||
return redirect(f'/session/{sessionID}')
|
||||
log_server("session successfully started")
|
||||
except:
|
||||
error_log("unable to create Session")
|
||||
return "{ \"message\": \"Login failed\"'}"
|
||||
|
||||
|
||||
@app.route("/login")
|
||||
def login():
|
||||
log_server("called /login")
|
||||
return render_template("login.html")
|
||||
|
||||
@app.route("/stopuhr", methods=['POST'])
|
||||
def stopuhr():
|
||||
if session:
|
||||
log_server("called /stopuhr")
|
||||
spielName = request.form['spielname']
|
||||
zeit = request.form['zeit']
|
||||
userId = request.form['userid']
|
||||
sessionId = request.form['sessionid']
|
||||
l = f"INSERT INTO game VALUES( \'{sessionID}\', \'{userId}\',\'{spielName}\', \'{zeit}\');"
|
||||
try:
|
||||
warning_log("verbindung mit Datenbank wurde aufgenommen")
|
||||
dbcon(l)
|
||||
log_server("time entered successfully /stopuhr")
|
||||
except:
|
||||
error_log("unable to run sql /stopuhr")
|
||||
return render_template()
|
||||
else:
|
||||
warning_log(" called /stopuhr without being logged in")
|
||||
return render_template('passwd.html')
|
||||
|
||||
@app.route("/get_event", methods=['POST'])
|
||||
def get_event():
|
||||
if session:
|
||||
log_server("called /get_event")
|
||||
event = request.form['event']
|
||||
zeit = request.form['zeit']
|
||||
sessionId = request.form['sessionid']
|
||||
l = f"INSERT INTO game VALUES( \'{event}\', \'{zeit}\', \'{sessionId}\');"
|
||||
try:
|
||||
con = sqlite3.connect("party.db")
|
||||
warning_log("verbindung mit db wurde aufgenommen")
|
||||
cur = con.cursor()
|
||||
cur.execute(l)
|
||||
con.commit()
|
||||
con.close()
|
||||
log_server("event entered successfully /get_event")
|
||||
except:
|
||||
error_log("unable to run sql /get_event")
|
||||
return render_template("login.html")
|
||||
else:
|
||||
warning_log(" called /get_event without being logged in")
|
||||
return render_template('passwd.html')
|
||||
|
||||
@app.route("/controll")
|
||||
def controll():
|
||||
if session:
|
||||
log_server("called /controll")
|
||||
return render_template("controll.html")
|
||||
else:
|
||||
warning_log(" called /controll without being logged in")
|
||||
return render_template('passwd.html')
|
||||
|
||||
@app.route("/game")
|
||||
def game():
|
||||
if session:
|
||||
log_server("called /game")
|
||||
return render_template("game.html")
|
||||
else:
|
||||
warning_log(" called /game without being logged in")
|
||||
|
||||
return render_template('passwd.html')
|
||||
|
||||
|
||||
@app.route("/rgb")
|
||||
def rgb():
|
||||
if session:
|
||||
log_server("called /rgb")
|
||||
return render_template("404.html")
|
||||
else:
|
||||
warning_log(" called /rgb without being logged in")
|
||||
return render_template('passwd.html')
|
||||
|
||||
@app.route("/get_login", methods=['POST'])
|
||||
def get_login():
|
||||
log_server("called /get_login with POST")
|
||||
username = request.form['username']
|
||||
sessionId = request.form['sessionID']
|
||||
userid = request.form['userID']
|
||||
l = f"select * from user where userID = \'{userid}\' and username=\'{username}\' and sessionID=\'{sessionId}\';"
|
||||
account = dbcon(l)
|
||||
if account:
|
||||
session['loggedin'] = True
|
||||
user_count = +1
|
||||
# session['username'] = account['username']
|
||||
log_server("loggedin successfully")
|
||||
return redirect(f'/session/{sessionId}')
|
||||
else:
|
||||
return "{ \"message\": \"Login failed\"'}"
|
||||
warning_log("unable to create new user /get_login")
|
||||
con.close()
|
||||
|
||||
@app.route("/new", methods=['POST'])
|
||||
def new():
|
||||
log_server("called /new with POST")
|
||||
username = request.form['username']
|
||||
sessionId = request.form['sessionID']
|
||||
userId = request.form['sessionID']
|
||||
info = "normal"
|
||||
l = f"INSERT INTO user(username, sessionID, info) VALUES (\'{username}\',\'{sessionId}\',\'{info}\');"
|
||||
con = sqlite3.connect("party.db")
|
||||
warning_log("verbindung mit db wurde aufgenommen")
|
||||
cur = con.cursor()
|
||||
cur.execute(l)
|
||||
con.commit()
|
||||
con.close()
|
||||
account = True
|
||||
if account:
|
||||
session['loggedin'] = True
|
||||
user_count = +1
|
||||
# session['username'] = account['username']
|
||||
log_server("created new user successfully")
|
||||
return redirect(f'/session/{sessionId}')
|
||||
else:
|
||||
return "{ \"message\": \"Login failed\"'}"
|
||||
warning_log("unable to create new user /new")
|
||||
con.close()
|
||||
|
||||
@app.errorhandler(404)
|
||||
def page_not_found(e):
|
||||
error_log("called non-existing page")
|
||||
# note that we set the 404 status explicitly
|
||||
return render_template('404.html'), 404
|
||||
|
||||
def create_app(config_filename):
|
||||
app.register_error_handler(404, page_not_found)
|
||||
log_server("created app")
|
||||
return app
|
||||
|
||||
# Use this line to run it localy
|
||||
#app.run(host="<ip>", port=80)
|
||||
if __name__ == "__main__":
|
||||
exit(main())
|
||||
@ -1,8 +0,0 @@
|
||||
PRAGMA foreign_keys=ON;
|
||||
CREATE TABLE user (userID INTEGER PRIMARY KEY,username TEXT, sessionID INTEGER NOT NULL, info TEXT);
|
||||
CREATE TABLE seession (sessionID INTEGER PRIMARY KEY, sessionname TEXT, sessionstatus TEXT, seessiontyp TEXT);
|
||||
CREATE TABLE chat (sessionID INTEGER, userID INTEGER, chatmessage TEXT, ZEIT TEXT);
|
||||
CREATE TABLE game (sessionID INTEGER, userID INTEGER, Spielname TEXT, Spielaktivität TEXT, ZEIT TEXT);
|
||||
CREATE TABLE uploadgame (sessionID INTEGER, userID INTEGER, Spielname TEXT, Spielstand TEXT);
|
||||
CREATE TABLE planer (eventname TEXT, eventzeit TEXT, sessionID INTEGER);
|
||||
CREATE TABLE mate (matename TEXT, mateanzahl INTEGER, sessionID INTEGER);
|
||||
70
picker.py
70
picker.py
@ -1,4 +1,70 @@
|
||||
import shutil, os
|
||||
import matplotlib.pyplot as plt
|
||||
import sqlite3
|
||||
|
||||
def picker():
|
||||
datei = open('server.log', 'a')
|
||||
|
||||
def dbcon(sqlstring):
|
||||
print ("test")
|
||||
try:
|
||||
con = sqlite3.connect("party.db")
|
||||
cur = con.cursor()
|
||||
cur.execute(sqlstring)
|
||||
except:
|
||||
return "error"
|
||||
|
||||
def tmbr():
|
||||
print("tomb raider datei")
|
||||
f = "sql"
|
||||
dbcon(f)
|
||||
|
||||
def nfsu2():
|
||||
print("nfsu2 datei")
|
||||
e = "sql"
|
||||
dbcon(e)
|
||||
|
||||
def anno1602():
|
||||
print("Anno 1602 datei")
|
||||
a = "sql"
|
||||
dbcon(a)
|
||||
|
||||
def picker(gamefile, sessionID, SpielerID):
|
||||
datei = open(gamefile, 'a')
|
||||
|
||||
if check == "nfsu2":
|
||||
nfsu2()
|
||||
if check == "anno16":
|
||||
anno1602()
|
||||
if check == tmbr:
|
||||
tmbr()
|
||||
|
||||
if not os.path.exists(sessionID):
|
||||
os.makedirs(sessionID)
|
||||
shutil.move(gamefile, sessionID)
|
||||
|
||||
|
||||
def createChart(sessionID,Spielname):
|
||||
con = sqlite3.connect("party.db")
|
||||
cur = con.cursor()
|
||||
dateiname = sessionID + Spielname + ".png"
|
||||
try:
|
||||
l = f"SELECT 'username' FROM user INNER JOIN game ON game.userID = user.userID;"
|
||||
user = [i[0] for i in cur.execute(l).fetchall()]
|
||||
except:
|
||||
print("Fehler beim Ausführen von:" + l)
|
||||
try:
|
||||
l = f"SELECT ZEIT FROM game WHERE sessionID = \'{sessionID}\' AND Spielname = \'{Spielname}\';"
|
||||
zeit = [i[0] for i in cur.execute(l).fetchall()]
|
||||
except:
|
||||
print("Fehler beim Ausführen von:" + l)
|
||||
|
||||
colors = ['green','blue','purple','brown','teal', 'yellow', 'black', 'orange']
|
||||
plt.bar(user, zeit, color=colors)
|
||||
plt.title(Spielname, fontsize=14)
|
||||
plt.xlabel('User', fontsize=14)
|
||||
plt.ylabel('Zeit in Sekunden', fontsize=14)
|
||||
plt.grid(False)
|
||||
plt.savefig(dateiname)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
print("Use main.py to use program")
|
||||
4
requirements.txt
Normal file
4
requirements.txt
Normal file
@ -0,0 +1,4 @@
|
||||
matplotlib
|
||||
random
|
||||
time
|
||||
numpy
|
||||
10
run.sh
10
run.sh
@ -1,16 +1,10 @@
|
||||
#!/bin/sh
|
||||
|
||||
python -c "import qrcode"
|
||||
if [ $? -eq 1 ]; then
|
||||
pip install qrcode
|
||||
fi
|
||||
|
||||
md5sum -c .sums
|
||||
if [ $? -eq 1 ]; then
|
||||
rm party.db
|
||||
cat party.sql | sqlite3 party.db
|
||||
fi
|
||||
cat ./Config/party.sql | sqlite3 party.db
|
||||
|
||||
export FLASK_APP=main.py
|
||||
|
||||
flask run
|
||||
sudo python3 main.py
|
||||
|
||||
679
server.py
Normal file
679
server.py
Normal file
@ -0,0 +1,679 @@
|
||||
from flask import Flask, render_template, jsonify, request, session, redirect
|
||||
from picker import picker as pick
|
||||
from picker import createChart
|
||||
import sqlite3
|
||||
import os
|
||||
import time
|
||||
import qrcode
|
||||
import shutil
|
||||
import re
|
||||
import numpy
|
||||
|
||||
def server():
|
||||
starttime = 0
|
||||
app = Flask(__name__, template_folder='templates/')
|
||||
date = time.strftime("%d-%m-%Y %H:%M:%S", time.localtime(time.time()))
|
||||
zeit = time.strftime("%H%M", time.localtime(time.time()))
|
||||
app.config['SECRET_KEY'] = 'party'
|
||||
matekiste = 0
|
||||
|
||||
|
||||
def dbcon(sql):
|
||||
con = sqlite3.connect("party.db")
|
||||
warning_log("verbindung mit db wurde aufgenommen")
|
||||
cur = con.cursor()
|
||||
cur.execute(sql)
|
||||
con.commit()
|
||||
return sql.fetchall()
|
||||
|
||||
def ipfin():
|
||||
datei = open('ip.txt', 'r')
|
||||
print (datei.read())
|
||||
return datei.read()
|
||||
|
||||
def dbcon1(sql):
|
||||
con = sqlite3.connect("party.db")
|
||||
cur = con.cursor()
|
||||
return cur.execute(sql)
|
||||
|
||||
|
||||
def uptime():
|
||||
time = int(zeit)
|
||||
uptime = time - starttime
|
||||
return uptime
|
||||
|
||||
|
||||
# log system
|
||||
def log_server(log):
|
||||
log = date + " " + log
|
||||
datei = open('server.log', 'a')
|
||||
datei.write('\n' + " " + log)
|
||||
log = date
|
||||
datei.close()
|
||||
|
||||
|
||||
def error_log(error):
|
||||
error = date + " [ERROR] " + error
|
||||
datei = open('server.log', 'a')
|
||||
datei.write('\n' + " " + error)
|
||||
log = date
|
||||
datei.close()
|
||||
|
||||
|
||||
def problem_log(problem):
|
||||
problem = date + " [PROBLEM] " + problem
|
||||
datei = open('server.log', 'a')
|
||||
datei.write('\n' + " " + problem)
|
||||
log = date
|
||||
datei.close()
|
||||
|
||||
|
||||
def warning_log(warning):
|
||||
warning = date + " [WARNING]" + warning
|
||||
datei = open('server.log', 'a')
|
||||
datei.write('\n' + " " + warning)
|
||||
log = date
|
||||
datei.close()
|
||||
|
||||
|
||||
# Materechner Logic
|
||||
def mate_logik(sorte, anzahl):
|
||||
if sorte == "Club Mate":
|
||||
koffeingehalt = 100
|
||||
|
||||
if sorte == "Mio Mate":
|
||||
koffeingehalt = 100
|
||||
|
||||
if sorte == "Flora Mate":
|
||||
koffeingehalt = 90
|
||||
|
||||
if sorte == "Mate Mate":
|
||||
koffeingehalt = 150
|
||||
|
||||
if sorte == "Buenos Mate":
|
||||
koffeingehalt = 100
|
||||
|
||||
if sorte == "1337 Mate":
|
||||
koffeingehalt = 145
|
||||
|
||||
if sorte == "Charitea Mate":
|
||||
koffeingehalt = 15
|
||||
|
||||
if sorte == "Bionade Mate":
|
||||
koffeingehalt = 20
|
||||
|
||||
|
||||
'''
|
||||
anzahl = anzahl + 1
|
||||
koffeingehalt = 0
|
||||
match sorte:
|
||||
case "Mio Mio":
|
||||
koffeingehalt = '''
|
||||
|
||||
|
||||
# mws = mate wirtschafts system
|
||||
def mws(kisten):
|
||||
log_server("mws wurde angefragt")
|
||||
return mate
|
||||
|
||||
|
||||
def sessionBeenden(sessionID):
|
||||
con = sqlite3.connect("party.db")
|
||||
warning_log("verbindung mit db wurde aufgenommen")
|
||||
cur = con.cursor()
|
||||
os.makedirs(sessionID)
|
||||
|
||||
|
||||
# Qr-code generator#
|
||||
def create_qr(id):
|
||||
if not os.path.exists("./static/img/qr.png"):
|
||||
qip = ipfin()
|
||||
img = qrcode.make(f'{qip}:80/session/{id}')
|
||||
type(img)
|
||||
img.save("./static/img/qr.png")
|
||||
else:
|
||||
warning_log("QR-Code ist bereits vorhanden")
|
||||
|
||||
|
||||
# Hauptseite
|
||||
@app.route("/")
|
||||
def index():
|
||||
log_server("called /")
|
||||
return render_template("index.html")
|
||||
|
||||
|
||||
# Neue Nachrichten
|
||||
@app.route("/get_chat", methods=['POST'])
|
||||
def get_chat():
|
||||
|
||||
log_server("called /get_chat")
|
||||
log_server("called /get_chat with POST")
|
||||
userID = request.form['userid']
|
||||
sessionID = request.form['sessionid']
|
||||
message = request.form['message']
|
||||
zeit = date
|
||||
l = f"INSERT INTO seession (sessionname, sesionstatus, seessiontyp) VALUES( \'{sessionID}\', \'{userID}\',\'{message}\', \'{zeit}\');"
|
||||
log_server("neue Nachricht")
|
||||
try:
|
||||
dbcon(l)
|
||||
log_server("message entered successfully")
|
||||
except Exception:
|
||||
error_log("unable to get new Messages")
|
||||
# account = cursor.fetchone()
|
||||
return render_template("chat.html")
|
||||
|
||||
@app.route("/get_game_file", methods=['POST'])
|
||||
def get_game_file():
|
||||
log_server("called /get_game_file")
|
||||
pick()
|
||||
|
||||
@app.route("/get_new_message")
|
||||
def get_new_message():
|
||||
|
||||
log_server("called /get_new_message")
|
||||
return render_template("chat.html")
|
||||
|
||||
@app.route("/message")
|
||||
def message():
|
||||
|
||||
log_server("called /message")
|
||||
return render_template("message.html")
|
||||
|
||||
# planer
|
||||
@app.route("/get_planer", methods=['POST'])
|
||||
def get_planer():
|
||||
log_server("called /get_planer")
|
||||
log_server("called /get_planer with POST")
|
||||
event = request.form['event']
|
||||
sessionID = request.form['sessionID']
|
||||
zeit = request.form['zeit']
|
||||
pfad = "/session/" + sessionID
|
||||
status = "running"
|
||||
l = f"INSERT INTO planer VALUES( \'{event}\', \'{zeit}\', \'{sessionID}\',\'{status}\');"
|
||||
log_server("neues Event")
|
||||
try:
|
||||
con = sqlite3.connect("party.db")
|
||||
warning_log("verbindung mit db wurde aufgenommen")
|
||||
cur = con.cursor()
|
||||
cur.execute(l)
|
||||
con.commit()
|
||||
con.close()
|
||||
log_server("event entered successfully /get_planer")
|
||||
except Exception:
|
||||
error_log("unable to insert event")
|
||||
return redirect(f'/session/{sessionID}')
|
||||
|
||||
|
||||
@app.route("/session/<id>")
|
||||
def _session(id):
|
||||
#print(os.cpu_count())
|
||||
#createChart("41", "NFSU2")
|
||||
log_server(f"called /session/{id}")
|
||||
con = sqlite3.connect("party.db")
|
||||
cur = con.cursor()
|
||||
l = f"SELECT eventname FROM planer WHERE sessionID = \'{id}\' ORDER BY eventzeit;"
|
||||
eventname = [i[0] for i in cur.execute(l).fetchall()]
|
||||
con.commit()
|
||||
|
||||
l = f"SELECT eventzeit FROM planer WHERE sessionID = \'{id}\' ORDER BY eventzeit;"
|
||||
eventzeit = [i[0] for i in cur.execute(l).fetchall()]
|
||||
#eventtime = re.split(',', eventzeit)
|
||||
con.commit()
|
||||
|
||||
creator = [i[0] for i in cur.execute("SELECT username FROM user WHERE info = 'Host'").fetchall()]
|
||||
con.commit()
|
||||
|
||||
l = f"SELECT count(username) FROM user WHERE sessionID = \'{id}\';"
|
||||
useranzahl = cur.execute(l).fetchall()
|
||||
|
||||
l = f"SELECT matename, mateanzahl FROM mate WHERE sessionID = \'{id}\' ORDER BY mateanzahl;"
|
||||
mate = cur.execute(l).fetchall()
|
||||
con.commit()
|
||||
|
||||
l = f"SELECT Spielname FROM game WHERE sessionID = \'{id}\' ORDER BY ZEIT;"
|
||||
game = [i[0] for i in cur.execute(l).fetchall()]
|
||||
con.commit()
|
||||
|
||||
l = f"SELECT userID FROM game WHERE sessionID = \'{id}\' ORDER BY ZEIT;"
|
||||
user = [i[0] for i in cur.execute(l).fetchall()]
|
||||
con.commit()
|
||||
|
||||
l = f"SELECT Spielaktivität FROM game WHERE sessionID = \'{id}\' ORDER BY ZEIT;"
|
||||
aktivitaet = [i[0] for i in cur.execute(l).fetchall()]
|
||||
con.commit()
|
||||
|
||||
l = f"SELECT username FROM user WHERE sessionID = \'{id}\';"
|
||||
unames = [i[0] for i in cur.execute(l).fetchall()]
|
||||
con.commit()
|
||||
|
||||
l = f"SELECT userID FROM user WHERE sessionID = \'{id}\';"
|
||||
uids = [i[0] for i in cur.execute(l).fetchall()]
|
||||
con.commit()
|
||||
|
||||
l = f"SELECT ZEIT FROM game WHERE sessionID = \'{id}\' ORDER BY ZEIT;"
|
||||
zeit = [i[0] for i in cur.execute(l).fetchall()]
|
||||
con.commit()
|
||||
|
||||
|
||||
l = f"SELECT Punkte FROM pointgame WHERE sessionID = \'{id}\' ORDER BY Punkte;"
|
||||
p_punkte = [i[0] for i in cur.execute(l).fetchall()]
|
||||
con.commit()
|
||||
|
||||
l = f"SELECT Spielname FROM pointgame WHERE sessionID = \'{id}\' ORDER BY Punkte;"
|
||||
p_game = [i[0] for i in cur.execute(l).fetchall()]
|
||||
con.commit()
|
||||
|
||||
l = f"SELECT Spielaktivität FROM pointgame WHERE sessionID = \'{id}\' ORDER BY Punkte;"
|
||||
p_aktivitaet = [i[0] for i in cur.execute(l).fetchall()]
|
||||
con.commit()
|
||||
|
||||
l = f"SELECT userID FROM pointgame WHERE sessionID = \'{id}\'ORDER BY Punkte;"
|
||||
p_user = [i[0] for i in cur.execute(l).fetchall()]
|
||||
con.commit()
|
||||
cur.close()
|
||||
|
||||
|
||||
class eventData:
|
||||
def __init__(self, evn, evz):
|
||||
self.eventname = evn
|
||||
self.eventzeit = evz
|
||||
|
||||
class userData:
|
||||
def __init__(self, us, usid):
|
||||
self.unames = us
|
||||
self.uids = usid
|
||||
|
||||
class gameData:
|
||||
def __init__(self, ga, akt, usr, ze):
|
||||
self.game = ga
|
||||
self.aktivitaet = akt
|
||||
self.user = usr
|
||||
self.zeit = ze
|
||||
|
||||
class pointgameData:
|
||||
def __init__(self, ga, akt, usr, pu):
|
||||
self.p_game = ga
|
||||
self.p_aktivitaet = akt
|
||||
self.p_user = usr
|
||||
self.p_punkte = pu
|
||||
|
||||
gameda = gameData(game, aktivitaet, user, zeit)
|
||||
pointgameda = pointgameData(p_game, p_aktivitaet, p_user, p_punkte)
|
||||
eventdata = eventData(eventname, eventzeit)
|
||||
userdat = eventData(unames, uids)
|
||||
|
||||
return render_template("session.html",
|
||||
zeit=zeit,
|
||||
aktivitaet=aktivitaet,
|
||||
user=user,
|
||||
eventdata=eventdata,
|
||||
gameda=gameda,
|
||||
pointgameda=pointgameda,
|
||||
userdat=userdat,
|
||||
game=game,
|
||||
useranzahl=useranzahl,
|
||||
creator=creator,
|
||||
mate=mate,
|
||||
uids=uids,
|
||||
unames=unames,
|
||||
der=uptime())
|
||||
|
||||
|
||||
@app.route("/mate", methods=['POST'])
|
||||
def mate():
|
||||
log_server("called /mate")
|
||||
|
||||
|
||||
mateFlaschen = request.form['mateFlaschen']
|
||||
sessionId = request.form['sessionID']
|
||||
mateSorte = request.form['mateSorte']
|
||||
|
||||
if mateSorte == "Club Mate" and mateFlaschen == 20:
|
||||
matekiste + 1
|
||||
mws(matekiste)
|
||||
if mateSorte == "Mio Mio" and mateFlaschen == 12:
|
||||
matekiste + 1
|
||||
mws(matekiste)
|
||||
if mateSorte == "Flora Mate" and mateFlaschen == 20:
|
||||
matekiste + 1
|
||||
mws(matekiste)
|
||||
if mateSorte == "Mate Mate" and mateFlaschen == 20:
|
||||
martekiste + 1
|
||||
mws(martekiste)
|
||||
if mateSorte == "Buenos Mate" and mateFlaschen == 20:
|
||||
matekiste + 1
|
||||
mws(matekiste)
|
||||
if mateSorte == "Charitea Mate" and mateFlaschen == 12:
|
||||
matekiste + 1
|
||||
mws(matekiste)
|
||||
if mateSorte == "1337 Mate" and mateFlaschen == 20:
|
||||
matekiste + 1
|
||||
mws(matekiste)
|
||||
if mateSorte == "Bionade Mate" and mateFlaschen == 20:
|
||||
martekiste + 1
|
||||
mws(martekiste)
|
||||
|
||||
mateSql = f"INSERT INTO mate VALUES (\"{mateSorte}\", \'{mateFlaschen}\', \'{sessionId}\');"
|
||||
try:
|
||||
con = sqlite3.connect("party.db")
|
||||
warning_log("Verbindung mit Datenbank wurde aufgenommen /mate")
|
||||
cur = con.cursor()
|
||||
cur.execute(mateSql)
|
||||
con.commit()
|
||||
con.close()
|
||||
|
||||
mate_logik(mateSorte, mateFlaschen)
|
||||
log_server("mate wurde in Datenbank eingefügt")
|
||||
except sqlite3.Error as e:
|
||||
error_log(f"error while executing sql: {e}")
|
||||
return redirect(f'/session/{sessionId}')
|
||||
|
||||
|
||||
@app.route("/drink", methods=['POST'])
|
||||
def drink():
|
||||
log_server("called /drink")
|
||||
|
||||
con = sqlite3.connect("party.db")
|
||||
warning_log("Verbindung mit Datenbank wurde aufgenommen /drink")
|
||||
cur = con.cursor()
|
||||
mateFlaschen = request.form['mateFlaschen']
|
||||
sessionId = request.form['sessionID']
|
||||
mateSorte = request.form['mateSorte']
|
||||
|
||||
l3 = f"SELECT mateanzahl FROM mate WHERE sessionID = \'{sessionId}\' AND matename = \'{mateSorte}\';"
|
||||
manzahl = [i[0] for i in cur.execute(l3).fetchall()]
|
||||
f = [mateFlaschen]
|
||||
substracted = list()
|
||||
for intem1, item2 in zip(manzahl, f):
|
||||
substracted.append(intem1 - item2)
|
||||
|
||||
k = substracted
|
||||
|
||||
|
||||
mateSql = f"UPDATE mate SET mateanzahl = \'{k}\' WHERE sessionID = \'{sessionId}\' AND matename = \'{mateSorte}\');"
|
||||
try:
|
||||
con = sqlite3.connect("party.db")
|
||||
warning_log("Verbindung mit Datenbank wurde aufgenommen /drink")
|
||||
cur = con.cursor()
|
||||
cur.execute(mateSql)
|
||||
con.commit()
|
||||
con.close()
|
||||
|
||||
mate_logik(mateSorte, mateFlaschen)
|
||||
log_server("mate wurde in Datenbank eingefügt")
|
||||
except sqlite3.Error as e:
|
||||
error_log(f"error while executing sql: {e}")
|
||||
return redirect(f'/session/{sessionId}')
|
||||
|
||||
|
||||
|
||||
@app.route("/logout")
|
||||
def logout():
|
||||
log_server("called /logout")
|
||||
user_count = -1
|
||||
return render_template("logout.html")
|
||||
|
||||
@app.route("/spiel")
|
||||
def spiel():
|
||||
log_server("called /spiel")
|
||||
user_count = -1
|
||||
spiel = "Tomb raider"
|
||||
return render_template("spiel.html", spiel=spiel,)
|
||||
|
||||
@app.route("/get_spiel")
|
||||
def get_spiel():
|
||||
log_server("called /get_spiel")
|
||||
return render_template("spielt.html")
|
||||
|
||||
|
||||
|
||||
@app.route("/signin")
|
||||
def signin():
|
||||
log_server("called /signin")
|
||||
return render_template("signin.html")
|
||||
|
||||
|
||||
@app.route("/password")
|
||||
def password():
|
||||
log_server("called /password")
|
||||
return render_template("passwort_ver.html")
|
||||
|
||||
|
||||
@app.route("/passwd")
|
||||
def passwd():
|
||||
log_server("called /passwd")
|
||||
return render_template("passwd.html")
|
||||
|
||||
|
||||
@app.route("/change")
|
||||
def change():
|
||||
log_server("called /change")
|
||||
return render_template("changeSession.html")
|
||||
|
||||
|
||||
@app.route("/create_session")
|
||||
def create_session():
|
||||
log_server("called /create_session")
|
||||
return render_template("createSession.html")
|
||||
|
||||
|
||||
@app.route("/get_creat_session", methods=['POST'])
|
||||
def get_creat_session():
|
||||
log_server("called /get_creat_session with POST")
|
||||
Gsessionname = request.form['sessionname']
|
||||
GsessionID = request.form['sessionid']
|
||||
Gusername = "Host"
|
||||
Gusertype = "admin"
|
||||
GuserId = 1
|
||||
Gstatus = "online"
|
||||
l1 = f'INSERT INTO seession VALUES({GsessionID}, \'{Gsessionname}\', \'online\', \'public\');'
|
||||
print(l1)
|
||||
log_server("neue Session")
|
||||
|
||||
con = sqlite3.connect("party.db")
|
||||
warning_log("verbindung mit db wurde aufgenommen")
|
||||
cur = con.cursor()
|
||||
log_server("a")
|
||||
cur.execute(l1)
|
||||
|
||||
log_server("f")
|
||||
user_count = +1
|
||||
starttime = int(zeit)
|
||||
create_qr(GsessionID)
|
||||
try:
|
||||
con = sqlite3.connect("party.db")
|
||||
warning_log("verbindung mit db wurde aufgenommen")
|
||||
cur = con.cursor()
|
||||
username = "Host"
|
||||
usertype = "admin"
|
||||
userId = 1
|
||||
l = f'INSERT INTO user (username, sessionID, info) VALUES (\'{username}\', {GsessionID}, \'{usertype}\');'
|
||||
cur.execute(l)
|
||||
con.commit()
|
||||
con.close()
|
||||
except e:
|
||||
warning_log("user admin konnte nicht angelegt werden")
|
||||
return redirect(f'/session/{GsessionID}')
|
||||
log_server("session successfully started")
|
||||
|
||||
@app.route("/charts")
|
||||
def charts():
|
||||
log_server("called /charts")
|
||||
csessionID = request.form['sessionID']
|
||||
con = sqlite3.connect("party.db")
|
||||
warning_log("verbindung mit db wurde aufgenommen")
|
||||
cur = con.cursor()
|
||||
k = f"SELCT COUNT(DISTINCT 'Spielname') FROM game WHERE sessionID = \'{csessionID}\';"
|
||||
cur.execute(k)
|
||||
|
||||
return redirect(f'/session/{csessionID}')
|
||||
|
||||
@app.route("/login")
|
||||
def login():
|
||||
log_server("called /login")
|
||||
return render_template("login.html")
|
||||
|
||||
|
||||
@app.route("/stopuhr", methods=['POST'])
|
||||
def stopuhr():
|
||||
|
||||
log_server("called /stopuhr")
|
||||
spielName = request.form['spiel']
|
||||
art = request.form['art']
|
||||
zeit = request.form['zeit']
|
||||
userId = request.form['userid']
|
||||
sessionId = request.form['sessionID']
|
||||
l = f"INSERT INTO game VALUES( \'{sessionId}\', \'{userId}\',\'{spielName}\',\'{art}\', \'{zeit}\');"
|
||||
try:
|
||||
warning_log("verbindung mit Datenbank wurde aufgenommen")
|
||||
dbcon(l)
|
||||
log_server("time entered successfully /stopuhr")
|
||||
except Exception:
|
||||
error_log("unable to run sql /stopuhr")
|
||||
return redirect(f'/session/{sessionId}')
|
||||
|
||||
|
||||
@app.route("/pointGame", methods=['POST'])
|
||||
def pointgame():
|
||||
userId = request.form['userid']
|
||||
sessionId = request.form['sessionID']
|
||||
l = f"INSERT INTO pointgame VALUES( \'{sessionId}\', \'{userId}\',\'{spielName}\',\'{art}\', \'{punkte}\');"
|
||||
try:
|
||||
warning_log("verbindung mit Datenbank wurde aufgenommen")
|
||||
dbcon(l)
|
||||
log_server("time entered successfully /pointGame")
|
||||
except Exception:
|
||||
error_log("unable to run sql /pointGame")
|
||||
return redirect(f'/session/{sessionId}')
|
||||
|
||||
|
||||
|
||||
@app.route("/get_event", methods=['POST'])
|
||||
def get_event():
|
||||
|
||||
log_server("called /get_event")
|
||||
event = request.form['event']
|
||||
zeit = request.form['zeit']
|
||||
sessionId = request.form['sessionid']
|
||||
l = f"INSERT INTO game VALUES( \'{event}\', \'{zeit}\', \'{sessionId}\');"
|
||||
try:
|
||||
con = sqlite3.connect("party.db")
|
||||
warning_log("verbindung mit db wurde aufgenommen")
|
||||
cur = con.cursor()
|
||||
cur.execute(l)
|
||||
con.commit()
|
||||
con.close()
|
||||
log_server("event entered successfully /get_event")
|
||||
except e:
|
||||
error_log("unable to run sql /get_event")
|
||||
return render_template("login.html")
|
||||
|
||||
|
||||
|
||||
@app.route("/controll")
|
||||
def controll():
|
||||
|
||||
log_server("called /controll")
|
||||
return render_template("controll.html")
|
||||
|
||||
@app.route("/statistik", methods=['POST'])
|
||||
def statistik():
|
||||
sessionId = request.form['id']
|
||||
game = request.form['game']
|
||||
createChart(sessionId, game)
|
||||
log_server("called /statistik")
|
||||
return render_template("controll.html")
|
||||
|
||||
|
||||
@app.route("/game")
|
||||
def game():
|
||||
|
||||
log_server("called /game")
|
||||
return render_template("game.html")
|
||||
|
||||
|
||||
|
||||
@app.route("/rgb")
|
||||
def rgb():
|
||||
|
||||
log_server("called /rgb")
|
||||
return render_template("404.html")
|
||||
|
||||
|
||||
@app.route("/get_login", methods=['POST'])
|
||||
def get_login():
|
||||
log_server("called /get_login with POST")
|
||||
username = request.form['username']
|
||||
sessionId = request.form['sessionID']
|
||||
userid = request.form['userID']
|
||||
l = f"select * from user where userID = \'{userid}\' and username=\'{username}\' and sessionID=\'{sessionId}\';"
|
||||
con = sqlite3.connect("party.db")
|
||||
warning_log("verbindung mit db wurde aufgenommen")
|
||||
cur = con.cursor()
|
||||
cur.execute(l)
|
||||
con.commit()
|
||||
con.close()
|
||||
# session['username'] = account['username']
|
||||
log_server("loggedin successfully")
|
||||
return redirect(f'/session/{sessionId}')
|
||||
|
||||
con.close()
|
||||
|
||||
|
||||
@app.route("/new", methods=['POST'])
|
||||
def new():
|
||||
log_server("called /new with POST")
|
||||
username = request.form['username']
|
||||
sessionId = request.form['sessionID']
|
||||
userId = request.form['sessionID']
|
||||
info = "normal"
|
||||
l = f"INSERT INTO user(username, sessionID, info) VALUES (\'{username}\',\'{sessionId}\',\'{info}\');"
|
||||
con = sqlite3.connect("party.db")
|
||||
warning_log("verbindung mit db wurde aufgenommen")
|
||||
cur = con.cursor()
|
||||
cur.execute(l)
|
||||
con.commit()
|
||||
con.close()
|
||||
account = True
|
||||
|
||||
# session['username'] = account['username']
|
||||
log_server("created new user successfully")
|
||||
return redirect(f'/session/{sessionId}')
|
||||
|
||||
con.close()
|
||||
|
||||
@app.route("/upload_file", methods=["POST"])
|
||||
def upload_file():
|
||||
"""
|
||||
log_server("called /upload_file")
|
||||
file = request.files
|
||||
print(f"{file=}")
|
||||
return render_template(f'404.html')"""
|
||||
file = request.files["file"]
|
||||
print (file)
|
||||
|
||||
if file:
|
||||
file.save("/Export", file.filename)
|
||||
return "File uploaded successfully!"
|
||||
return "No file found"
|
||||
|
||||
@app.errorhandler(404)
|
||||
def page_not_found(e):
|
||||
error_log("called non-existing page")
|
||||
# note that we set the 404 status explicitly
|
||||
return render_template('404.html'), 404
|
||||
|
||||
|
||||
def create_app(config_filename):
|
||||
app.register_error_handler(404, page_not_found)
|
||||
log_server("created app")
|
||||
return app
|
||||
|
||||
|
||||
# Use this line to run it localy
|
||||
|
||||
runip = ipfin()
|
||||
app.run(host=runip, port=80)
|
||||
|
||||
if __name__ == "__main__":
|
||||
print("Use main.py to use program")
|
||||
17
shell.nix
Normal file
17
shell.nix
Normal file
@ -0,0 +1,17 @@
|
||||
{ pkgs ? import (fetchTarball "https://github.com/NixOS/nixpkgs/archive/nixos-22.11.tar.gz") {} }:
|
||||
pkgs.mkShell {
|
||||
packages = [
|
||||
(pkgs.python3.withPackages (ps: [
|
||||
ps.flask
|
||||
ps.qrcode
|
||||
ps.numpy
|
||||
ps.matplotlib
|
||||
]))
|
||||
|
||||
pkgs.curl
|
||||
pkgs.vim
|
||||
pkgs.sqlite
|
||||
pkgs.tmux
|
||||
pkgs.tree
|
||||
];
|
||||
}
|
||||
@ -10,7 +10,7 @@ a {
|
||||
/* Set a style for all buttons */
|
||||
button {
|
||||
background-color: #6d4087;
|
||||
color: white;
|
||||
color: rgb(29, 24, 24);
|
||||
padding: 14px 20px;
|
||||
margin: 8px 0;
|
||||
border: none;
|
||||
@ -85,15 +85,16 @@ a {
|
||||
}
|
||||
|
||||
|
||||
input[type=text], input[type=password] input[type=time] input[type=date]{
|
||||
input[type=text], input[type=password] input[type=time]{
|
||||
width: 30%;
|
||||
margin: 8px 0;
|
||||
padding: 12px 20px;
|
||||
display: inline-block;
|
||||
border: 2px solid green;
|
||||
border: 2px solid rgb(58, 58, 58);
|
||||
box-sizing: border-box;
|
||||
border-radius: 12px;
|
||||
color: #839c87;
|
||||
color: #050705;
|
||||
background-color: rgb(142, 142, 143);
|
||||
}
|
||||
|
||||
|
||||
@ -161,4 +162,28 @@ a {
|
||||
.dark-mode {
|
||||
background-image: linear-gradient(to right, rgb(5, 49, 16), rgb(63, 63, 236))
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
summary::-webkit-details-marker,
|
||||
summary::marker {
|
||||
content: ""; /* Verwendung des "Pfeil"-Symbols anstelle des Dreiecks */
|
||||
color: rgb(0, 0, 0);
|
||||
font-size: 2em;
|
||||
font-weight: bold;
|
||||
transition: all 0.5s;
|
||||
}
|
||||
|
||||
|
||||
details[open] summary::-webkit-details-marker,
|
||||
details[open] summary::marker {
|
||||
content: " ";
|
||||
|
||||
}
|
||||
table, th, td, caption {
|
||||
border: thick solid #33363d;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@ -1,3 +1,9 @@
|
||||
function save() {
|
||||
|
||||
}
|
||||
|
||||
function export_session() {
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -1,54 +1,41 @@
|
||||
var modal = document.getElementById('id01');
|
||||
// When the user clicks anywhere outside of the modal, close it
|
||||
window.onclick = (event) =>
|
||||
event.target == modal ?
|
||||
modal.style.display = "none" : undefined;
|
||||
var h1 = document.getElementsByTagName('h1')[0];
|
||||
var start = document.getElementById('strt');
|
||||
var stop = document.getElementById('stp');
|
||||
var reset = document.getElementById('rst');
|
||||
var sec = 0;
|
||||
var min = 0;
|
||||
var hrs = 0;
|
||||
var t;
|
||||
|
||||
window.onload = function () {
|
||||
var seconds = 00;
|
||||
var tens = 00;
|
||||
var appendTens = document.getElementById("tens")
|
||||
var appendSeconds = document.getElementById("seconds")
|
||||
var buttonStart = document.getElementById('button-start');
|
||||
var buttonStop = document.getElementById('button-stop');
|
||||
var buttonReset = document.getElementById('button-reset');
|
||||
var Interval ;
|
||||
var time = seconds + tens;
|
||||
|
||||
function onclckfn() {
|
||||
clearInterval(Interval);
|
||||
Interval = setInterval(startTimer, 10);
|
||||
}
|
||||
|
||||
buttonStop.onclick = () =>
|
||||
clearInterval(Interval);
|
||||
|
||||
buttonReset.onclick = function() {
|
||||
clearInterval(Interval);
|
||||
tens = "00";
|
||||
seconds = "00";
|
||||
appendTens.innerHTML = tens;
|
||||
appendSeconds.innerHTML = seconds;
|
||||
}
|
||||
|
||||
function startTimer () {
|
||||
tens++;
|
||||
|
||||
if(tens <= 9)
|
||||
appendTens.innerHTML = "0" + tens;
|
||||
|
||||
if (tens > 9)
|
||||
appendTens.innerHTML = tens;
|
||||
|
||||
if (tens > 99) {
|
||||
console.log("seconds");
|
||||
seconds++;
|
||||
appendSeconds.innerHTML = "0" + seconds;
|
||||
tens = 0;
|
||||
appendTens.innerHTML = "0" + 0;
|
||||
}
|
||||
|
||||
if (seconds > 9)
|
||||
appendSeconds.innerHTML = seconds;
|
||||
}
|
||||
function tick(){
|
||||
sec++;
|
||||
if (sec >= 60) {
|
||||
sec = 0;
|
||||
min++;
|
||||
if (min >= 60) {
|
||||
min = 0;
|
||||
hrs++;
|
||||
}
|
||||
}
|
||||
}
|
||||
function add() {
|
||||
tick();
|
||||
h1.textContent = (hrs > 9 ? hrs : "0" + hrs)
|
||||
+ ":" + (min > 9 ? min : "0" + min)
|
||||
+ ":" + (sec > 9 ? sec : "0" + sec);
|
||||
timer();
|
||||
}
|
||||
function timer() {
|
||||
t = setTimeout(add, 1000);
|
||||
}
|
||||
|
||||
timer();
|
||||
start.onclick = timer;
|
||||
stop.onclick = function() {
|
||||
clearTimeout(t);
|
||||
}
|
||||
reset.onclick = function() {
|
||||
h1.textContent = "00:00:00";
|
||||
seconds = 0; minutes = 0; hours = 0;
|
||||
sec = 0; min = 0; hrs = 0;
|
||||
}
|
||||
|
||||
25
static/js/general.js
Normal file
25
static/js/general.js
Normal file
@ -0,0 +1,25 @@
|
||||
|
||||
// zum prüfen ob Benutzer eingelogt ist
|
||||
var s = sessionStorage.getItem("sessionID")
|
||||
if (s == null) {
|
||||
window.location.replace("http://127.0.0.1:5000/passwd")
|
||||
}
|
||||
|
||||
// Magie um die Tabs anzuzeigen
|
||||
function change_div(pfad)
|
||||
{
|
||||
for (var i = 0; i < document.getElementsByClassName("tmplt_tab").length; i++) document.getElementsByClassName("tmplt_tab")[i].hidden = true;
|
||||
console.log(pfad)
|
||||
document.getElementById(pfad).hidden = false;
|
||||
}
|
||||
|
||||
// Benutzer anzeigen unter session
|
||||
let name = sessionStorage.getItem("name");
|
||||
document.getElementById("user").innerHTML = name;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
29
templates/changeSession.html
Normal file
29
templates/changeSession.html
Normal file
@ -0,0 +1,29 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<link rel="stylesheet" href="{{ url_for('static', filename='../static/css/style.css') }}">
|
||||
<title>Change Session</title>
|
||||
</head>
|
||||
<body>
|
||||
<center>
|
||||
<h1>Du bist bereits in Session: </h1>
|
||||
<p id="Session"></p>
|
||||
<h1>Möchtest du diese Verlassen, und in eine andere Session?</h1>
|
||||
|
||||
<a href="/logout">
|
||||
<button type="submit">verlassen</button>
|
||||
</a>
|
||||
<a href="javascript:history.back()">
|
||||
<button type="button" class="cancelbtn"> bleiben</button>
|
||||
</a>
|
||||
|
||||
<script>
|
||||
let session = sessionStorage.getItem("sessionID");
|
||||
document.getElementById("Session").innerHTML = session;
|
||||
</script>
|
||||
</center>
|
||||
</body>
|
||||
</html>
|
||||
@ -8,24 +8,34 @@
|
||||
</head>
|
||||
<body>
|
||||
<center><h1>Create Session</h1></center>
|
||||
<form class="modal-content animate" action="http://127.0.0.1:5000//get_creat_session" method="POST">
|
||||
<form class="modal-content animate" action="/get_creat_session" method="POST">
|
||||
<div class="container">
|
||||
<label>Session name : </label>
|
||||
<input type="text" placeholder="Enter Session name" name="sessionname" required>
|
||||
<label>Session Id : </label>
|
||||
<input id="idIn" type="text" placeholder="Session Id" name="sessionid" required>
|
||||
<button type="submit" onclick="setID()">create</button>
|
||||
<input id="sessionName" type="text" placeholder="Enter Session name" name="sessionname" required>
|
||||
<input id="idIn" name="sessionid" type="number" value="test" required hidden>
|
||||
<button type="submit" onclick="randomnumber1(1, 42) ">create</button>
|
||||
<a href="javascript:history.back()">
|
||||
<button type="button" class="cancelbtn"> Cancel</button>
|
||||
<button type="button" class="cancelbtn"> Cancel</button>
|
||||
</a>
|
||||
</div>
|
||||
</form>
|
||||
<script>
|
||||
function setID() {
|
||||
const sessID = document.getElementById('IdIn').innerHTML;
|
||||
console.log(sessID)
|
||||
sessionStorage.setItem("sessionID", sessID)
|
||||
|
||||
function randomnumber1(min, max) {
|
||||
rnumber1 = Math.floor(Math.random() * (max - min + 1) ) + min
|
||||
document.getElementById("idIn").value = rnumber1
|
||||
|
||||
window.sessionStorage.setItem("sessionID", rnumber1)
|
||||
|
||||
let sessionname = document.getElementById("sessionName").value
|
||||
window.sessionStorage.setItem("session", sessionname)
|
||||
|
||||
window.sessionStorage.setItem("userID", "1")
|
||||
|
||||
window.sessionStorage.setItem("name", "Host")
|
||||
}
|
||||
|
||||
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
|
||||
@ -35,10 +35,10 @@
|
||||
</head>
|
||||
<body>
|
||||
<center><h1>Willkommen beim Party-Controller</h1></center>
|
||||
<a href="http://127.0.0.1:5000/login">
|
||||
<a href="/login">
|
||||
<button class="btn btn-primary btn-lg">Join Session</button>
|
||||
</a>
|
||||
<a href="http://127.0.0.1:5000/create_session">
|
||||
<a href="/create_session">
|
||||
<button class="btn btn-primary btn-lg">Create Session</button>
|
||||
</a>
|
||||
<center><img src="/static/img/party.png" width="250" height="600"></center>
|
||||
|
||||
@ -33,18 +33,18 @@
|
||||
<h4>Login</h4>
|
||||
</summary>
|
||||
|
||||
<form class="modal-content animate" action="http://127.0.0.1:5000/get_login" method="POST">
|
||||
<form class="modal-content animate" action="/get_login" method="POST">
|
||||
<div class="container">
|
||||
<label>Username : </label>
|
||||
<input type="text" placeholder="Enter Username" name="username" required>
|
||||
<input id="name2" type="text" placeholder="Enter Username" name="username" required>
|
||||
</br>
|
||||
<label>UserId : </label>
|
||||
<input type="text" placeholder="Session Id" name="userID" required>
|
||||
<input id="Uid" type="text" placeholder="UserID" name="userID" required>
|
||||
</br>
|
||||
<label>Session Id : </label>
|
||||
<input type="text" placeholder="Session Id" name="id" required>
|
||||
<input id="id1"type="text" placeholder="Session Id" name="sessionID" required>
|
||||
</br>
|
||||
<button type="submit">Login</button>
|
||||
<button type="submit" onclick="setUID() & setID1() & setname2()">Login</button>
|
||||
</center>
|
||||
</div>
|
||||
</form>
|
||||
@ -54,18 +54,18 @@
|
||||
<details>
|
||||
<summary id="test"><h4>User erstellen</h4></summary>
|
||||
|
||||
<form class="modal-content animate" action="http://127.0.0.1:5000/new" method="POST">
|
||||
<form class="modal-content animate" action="/new" method="POST">
|
||||
<div class="container">
|
||||
<label>Username : </label>
|
||||
<input type="text" placeholder="Enter Username" name="username" required>
|
||||
<input id="name3" type="text" placeholder="Enter Username" name="username" required>
|
||||
</br>
|
||||
<label>UserId : </label>
|
||||
<input type="text" placeholder="Session Id" name="userID" required>
|
||||
<input id="Uid1" type="hidden" placeholder="UserID" name="userID" required>
|
||||
</br>
|
||||
<label>Session Id : </label>
|
||||
<input type="text" placeholder="Session Id" name="sessionID" required>
|
||||
<input id="id2"type="text" placeholder="Session Id" name="sessionID" required>
|
||||
</br>
|
||||
<button type="submit">Login</button>
|
||||
<button type="submit" onclick="setID2() & setname3() & setname2() & setname3() & randomnumber(1 , 42)">Create</button>
|
||||
</center>
|
||||
</div>
|
||||
</form>
|
||||
@ -74,17 +74,37 @@
|
||||
<a href="javascript:history.back()">
|
||||
<button type="button" class="cancelbtn"> Cancel</button>
|
||||
</center>
|
||||
|
||||
<div style="width: 500px" id="reader"></div>
|
||||
<script src="html5-qrcode.min.js"></script>
|
||||
<script>
|
||||
var html5QrcodeScanner = new Html5QrcodeScanner(
|
||||
"reader", { fps: 10, qrbox: 250 });
|
||||
function onScanSuccess(decodedText, decodedResult) {
|
||||
console.log(`Scan result: ${decodedText}`, decodedResult);
|
||||
html5QrcodeScanner.clear();
|
||||
function setUID() {
|
||||
let sessID = document.getElementById("Uid").value
|
||||
window.sessionStorage.setItem("userID", sessID)
|
||||
}
|
||||
html5QrcodeScanner.render(onScanSuccess);
|
||||
|
||||
function setID1() {
|
||||
let sessID = document.getElementById("id1").value
|
||||
window.sessionStorage.setItem("sessionID", sessID)
|
||||
}
|
||||
|
||||
function setID2() {
|
||||
let sessID = document.getElementById("id2").value
|
||||
window.sessionStorage.setItem("sessionID", sessID)
|
||||
}
|
||||
|
||||
function setname2() {
|
||||
let sessID = document.getElementById("name2").value
|
||||
window.sessionStorage.setItem("name", sessID)
|
||||
}
|
||||
|
||||
function setname3() {
|
||||
let sessID = document.getElementById("name3").value
|
||||
window.sessionStorage.setItem("name", sessID)
|
||||
}
|
||||
|
||||
function randomnumber(min, max) {
|
||||
rnumber = Math.floor(Math.random() * (max - min + 1) ) + min
|
||||
document.getElementById("Uid1").innerHTML = rnumber
|
||||
window.sessionStorage.setItem("userID", rnumber)
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@ -1,6 +1,6 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>logout</title>
|
||||
<title>logout 👋</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
@ -8,10 +8,24 @@
|
||||
</head>
|
||||
<body>
|
||||
<center>
|
||||
<h1>Adios</h1>
|
||||
<a href="http://127.0.0.1:5000/">
|
||||
<h1>Adios 👋</h1>
|
||||
<p id="name"></p>
|
||||
|
||||
<script>
|
||||
let session = sessionStorage.getItem("name");
|
||||
document.getElementById("name").innerHTML = session;
|
||||
</script>
|
||||
<p>Wollen Sie die Session verlassen?</p>
|
||||
<a href="/">
|
||||
<button class="btn btn-primary btn-lg">Home</button>
|
||||
</a>
|
||||
<a href="javascript:history.back()">
|
||||
<button type="button" class="cancelbtn"> zurück</button>
|
||||
</center>
|
||||
|
||||
<script>
|
||||
|
||||
sessionStorage.clear();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@ -1,16 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Mate Rechner</title>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<div class="container d-flex justifiy-content-center">
|
||||
<h1>hello</h1>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@ -16,6 +16,10 @@
|
||||
<form action="/create_session">
|
||||
<button type="submit">Create</button>
|
||||
</form>
|
||||
</br>
|
||||
<form action="/">
|
||||
<button type="submit">Home</button>
|
||||
</form>
|
||||
</center>
|
||||
</body>
|
||||
</html>
|
||||
@ -1,156 +1,374 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="de">
|
||||
<html>
|
||||
<head>
|
||||
|
||||
<head>
|
||||
<title>🎉 Party</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<link rel="stylesheet" href="{{ url_for('static', filename='../static/css/style.css') }}">
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<a href="http://127.0.0.1:5000/logout">
|
||||
<button class="btn btn-primary btn-lg">Logout</button>
|
||||
</a>
|
||||
</div>
|
||||
<label class="switch">
|
||||
<input type="checkbox" onclick="myFunction()">
|
||||
<span class="slider round"></span>
|
||||
</label>
|
||||
<script>
|
||||
function myFunction() {
|
||||
var element = document.body;
|
||||
element.classList.toggle("dark-mode");
|
||||
}
|
||||
</script>
|
||||
<center>
|
||||
<a onclick= "change_div('_planer')">
|
||||
<button class="btn btn-primary btn-lg">Planer</button>
|
||||
</a>
|
||||
<a onclick= "change_div('_game')">
|
||||
<button class="btn btn-primary btn-lg">Game</button>
|
||||
</a>
|
||||
<a onclick= "change_div('_chat')">
|
||||
<button class="btn btn-primary btn-lg">Chat</button>
|
||||
</a>
|
||||
<a onclick= "change_div('_mate')">
|
||||
<button class="btn btn-primary btn-lg">Mate</button>
|
||||
</a>
|
||||
<a onclick= "change_div('_seession')">
|
||||
<button class="btn btn-primary btn-lg">Session</button>
|
||||
</a>
|
||||
<a onclick= "change_div('_controll')">
|
||||
<button class="btn btn-primary btn-lg">Settings</button>
|
||||
</a>
|
||||
|
||||
<div hidden class="tmplt_tab" id="_planer">
|
||||
{% block content %}
|
||||
<p>{{ asd }}</p>
|
||||
|
||||
<p>Füge ein Event ein</p>
|
||||
<form class="modal-content animate" action="/get_planer" method="POST">
|
||||
<div class="container">
|
||||
<input type="text" placeholder="Tomb Raider spielen" name="event" required>
|
||||
<input type="text" placeholder="sessionID" name="sessionID" required>
|
||||
<input type="time" placeholder="15:30" name="zeit" required>
|
||||
<button type="submit">➕</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div hidden class="tmplt_tab" id="_game">
|
||||
|
||||
<div class="wrapper">
|
||||
<center>
|
||||
<p><span id="seconds">00</span>:<span id="tens">00</span></p>
|
||||
<button id="button-start">Start</button>
|
||||
<button id="button-stop">Stop</button>
|
||||
<button id="button-reset">Reset</button>
|
||||
<form class="modal-content animate" action="http://127.0.0.1:5000/stopuhr" method="POST">
|
||||
<div class="container">
|
||||
</br>
|
||||
<input type="text" placeholder="Tomb Raider" name="spiel" required>
|
||||
<input type="text" placeholder="parcour" name="art" required>
|
||||
<button type="submit">➕</button>
|
||||
|
||||
<input type="file" name="file">
|
||||
</div>
|
||||
</form>
|
||||
</center>
|
||||
</div>
|
||||
<div id="statistik">
|
||||
{% for post in game %}
|
||||
<p>{{ game }}</p>
|
||||
<hr>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<a href="/logout">
|
||||
<button class="btn btn-primary btn-lg"> 👋</button>
|
||||
</a>
|
||||
</div>
|
||||
<div hidden class="tmplt_tab" id="_chat">
|
||||
<iframe id="ifr" src="/message" width="800" height="450" frameBorder="0"></iframe>
|
||||
<div id="userNameEntryDiv">
|
||||
<input type="text" placeholder="Username..." id="userNameEntry">
|
||||
<button id="chatUsernameButton" onclick="join_chat()">Join chat</button>
|
||||
</div>
|
||||
<form class="modal-content animate" action="http://127.0.0.1:5000/chat" method="POST">
|
||||
<div class="container">
|
||||
<input type="text" placeholder="Hallo Welt" name="message" required>
|
||||
<button type="submit">
|
||||
➤
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div hidden class="tmplt_tab" id="_mate">
|
||||
<form class="modal-content animate" action="http://127.0.0.1:5000/mate" method="POST">
|
||||
<p>folgende Mateflaschen sind auf Lager {{ game }} </p>
|
||||
<div class="container" style="margin-top: 2em" >
|
||||
<input type="text" placeholder="Mate Flaschen Anzahl" name="mateFlaschen" required>
|
||||
<input type="text" placeholder="Mate Marke" name="mateSorte" required>
|
||||
<input type="text" placeholder="SessionID" name="sessionID" required>
|
||||
<button type="submit">
|
||||
➤
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div hidden class="tmplt_tab" id="_seession">
|
||||
<h1> Session Information</h1>
|
||||
<img src="/static/img/user.png" width="60" height="60">
|
||||
<label class="switch">
|
||||
<input type="checkbox" onclick="myFunction()">
|
||||
<span class="slider round"></span>
|
||||
</label>
|
||||
<script>
|
||||
function myFunction() {
|
||||
var element = document.body;
|
||||
element.classList.toggle("dark-mode");
|
||||
}
|
||||
</script>
|
||||
<center>
|
||||
<a onclick="change_div('_home')">
|
||||
<button class="btn btn-primary btn-lg">🏠</button>
|
||||
</a>
|
||||
<a onclick="change_div('_planer')">
|
||||
<button class="btn btn-primary btn-lg">📅</button>
|
||||
</a>
|
||||
<a onclick="change_div('_game')">
|
||||
<button class="btn btn-primary btn-lg">🎮</button>
|
||||
</a>
|
||||
<a onclick="change_div('_chat')">
|
||||
<button class="btn btn-primary btn-lg">💬</button>
|
||||
</a>
|
||||
<a onclick="change_div('_musik')">
|
||||
<button class="btn btn-primary btn-lg">🎵</button>
|
||||
</a>
|
||||
<a onclick="change_div('_mate')">
|
||||
<button class="btn btn-primary btn-lg">🍹</button>
|
||||
</a>
|
||||
<a onclick="change_div('_seession')">
|
||||
<button class="btn btn-primary btn-lg">Session</button>
|
||||
</a>
|
||||
<a onclick="change_div('_controll')">
|
||||
<button class="btn btn-primary btn-lg">⚙️</button>
|
||||
</a>
|
||||
<a onclick="change_div('_files')">
|
||||
<button class="btn btn-primary btn-lg">📁</button>
|
||||
</a>
|
||||
|
||||
|
||||
<p>Useranzahl: {{das}}</p>
|
||||
<p>Uptime: {{der}}</p>
|
||||
<div hidden class="tmplt_tab" id="_home">
|
||||
<h2>Willkommen</h2>
|
||||
<p>Party Controller</p>
|
||||
</div>
|
||||
|
||||
<p>Creator: {{er}}</p>
|
||||
<h1>QR-Code</h1>
|
||||
{% endblock %}
|
||||
<div hidden class="tmplt_tab" id="_planer">
|
||||
<center>
|
||||
{% block content %}
|
||||
|
||||
<img src="../static/img/qr.png">
|
||||
</div>
|
||||
<div hidden class="tmplt_tab" id="_controll">
|
||||
<table>
|
||||
<tr>
|
||||
<th>Event</th>
|
||||
<th>Zeit</th>
|
||||
<th>Status</th>
|
||||
</tr>
|
||||
{% for i in range(eventdata.eventname|length) %}
|
||||
<tr>
|
||||
<td>{{ eventdata.eventname[i] }}
|
||||
<td>{{ eventdata.eventzeit[i] }}</td>
|
||||
<td>Status</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
<p>Füge ein Event ein</p>
|
||||
<form class="modal-content animate" action="/get_planer" method="POST">
|
||||
<div class="container">
|
||||
<input type="text" placeholder="Tomb Raider spielen" name="event" required>
|
||||
<input id="planerSID" type="hidden" placeholder="sessionID" name="sessionID" required>
|
||||
<script type="text/javascript">
|
||||
var sid = sessionStorage.getItem("sessionID")
|
||||
document.getElementById('planerSID').value = sid;
|
||||
</script>
|
||||
<input type="time" placeholder="15:30" name="zeit" required>
|
||||
<button type="submit">➕</button>
|
||||
</div>
|
||||
</form>
|
||||
</center>
|
||||
</div>
|
||||
<div hidden class="tmplt_tab" id="_game">
|
||||
<center>
|
||||
<a href="/spiel" onclick="window.open('/spiel', 'newwindow', 'width=600,height=800'); return false;">
|
||||
<button type="button" class="cancelbtn"> Add game</button> </a>
|
||||
|
||||
<div id="LED">
|
||||
<h3>Setze eine Fabe für die LEDs</h3>
|
||||
<label for="colorpicker">Led Streifen:</label>
|
||||
<input type="color" id="colorpicker" value="#0000ff">
|
||||
</div>
|
||||
<div id="userVerwaltung">
|
||||
<h3>User Verwaltung</h3>
|
||||
<p>An dieser Stelle sollen später die User angezeigt werden, und der Session Admin kann diese dann verwalten</p>
|
||||
<div class="wrapper">
|
||||
|
||||
<details>
|
||||
<summary>Zeit-Spiele</summary>
|
||||
<h1><time>00:00:00</time></h1>
|
||||
<button id="strt">start</button>
|
||||
<button id="stp">stop</button>
|
||||
<button id="rst">reset</button>
|
||||
|
||||
<form class="modal-content animate" action="/stopuhr" method="POST">
|
||||
<div class="container">
|
||||
</br>
|
||||
<input type="text" placeholder="Tomb Raider" name="spiel" required>
|
||||
</br>
|
||||
<input type="text" placeholder="parcour" name="art" required>
|
||||
</br>
|
||||
<input type="text" placeholder="00:00:40" name="zeit" required>
|
||||
</br>
|
||||
<input id="gameSID" type="hidden" placeholder="Session ID" name="sessionID" required>
|
||||
<script type="text/javascript">
|
||||
var sid = sessionStorage.getItem("sessionID")
|
||||
document.getElementById('gameSID').value = sid;
|
||||
</script>
|
||||
<input id="gameUID" type="hidden" placeholder="UserID" name="userid" required>
|
||||
<script type="text/javascript">
|
||||
var sid = sessionStorage.getItem("sessionID")
|
||||
document.getElementById('gameUID').value = sid;
|
||||
</script>
|
||||
</br>
|
||||
<button type="submit">➕</button>
|
||||
</br>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<th>Spieler</th>
|
||||
<th>Game</th>
|
||||
<th>Aktivität</th>
|
||||
<th>Zeit</th>
|
||||
</tr>
|
||||
{% for i in range(gameda.user|length) %}
|
||||
<tr>
|
||||
<td>{{ gameda.user[i] }}</td>
|
||||
<td>{{ gameda.game[i] }}</td>
|
||||
<td>{{ gameda.aktivitaet[i] }}</td>
|
||||
<td>{{ gameda.zeit[i] }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
|
||||
</div>
|
||||
</details>
|
||||
<div class="wrapper">
|
||||
<details>
|
||||
<summary>Punkte-Spiele</summary>
|
||||
<form class="modal-content animate" action="/pointGame" method="POST">
|
||||
<div class="container">
|
||||
</br>
|
||||
<input type="text" placeholder="Tomb Raider" name="spiel" required>
|
||||
</br>
|
||||
<input type="text" placeholder="parcour" name="art" required>
|
||||
</br>
|
||||
<input type="text" placeholder="60" name="punkte" required>
|
||||
</br>
|
||||
<input id="gameSID" type="hidden" placeholder="Session ID" name="sessionID" required>
|
||||
<script type="text/javascript">
|
||||
var sid = sessionStorage.getItem("sessionID")
|
||||
document.getElementById('pointgameSID').value = sid;
|
||||
</script>
|
||||
<input id="gameUID" type="hidden" placeholder="UserID" name="userid" required>
|
||||
<script type="text/javascript">
|
||||
var sid = sessionStorage.getItem("sessionID")
|
||||
document.getElementById('pointgameUID').value = sid;
|
||||
</script>
|
||||
</br>
|
||||
<button type="submit">➕</button>
|
||||
</br>
|
||||
</div>
|
||||
</form>
|
||||
<table>
|
||||
<tr>
|
||||
<th>Spieler</th>
|
||||
<th>Game</th>
|
||||
<th>Aktivität</th>
|
||||
<th>Punkte</th>
|
||||
</tr>
|
||||
{% for i in range(pointgameda.p_user|length) %}
|
||||
<tr>
|
||||
<td>{{ pointgameda.p_user[i] }}</td>
|
||||
<td>{{ pointgameda.p_game[i] }}</td>
|
||||
<td>{{ pointgameda.p_aktivitaet[i] }}</td>
|
||||
<td>{{ pointgameda.p_zeit[i] }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
</details>
|
||||
</div>
|
||||
</center>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</center>
|
||||
</div>
|
||||
<div hidden class="tmplt_tab" id="_chat">
|
||||
<center>
|
||||
<iframe id="ifr" src="/message" width="800" height="450" frameBorder="0"></iframe>
|
||||
<div id="userNameEntryDiv">
|
||||
<input type="text" placeholder="Username..." id="userNameEntry">
|
||||
<button id="chatUsernameButton" onclick="join_chat()">Join chat</button>
|
||||
</div>
|
||||
<form class="modal-content animate" action="http://127.0.0.1:5000/chat" method="POST">
|
||||
<div class="container">
|
||||
<input type="text" placeholder="Hallo Welt" name="message" required>
|
||||
<button type="submit">
|
||||
➤
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<button onclick="save()">💾</button>
|
||||
</center>
|
||||
</form>
|
||||
</center>
|
||||
</div>
|
||||
<div hidden class="tmplt_tab" id="_musik">
|
||||
<center>
|
||||
<h1>Musik</h1>
|
||||
</center>
|
||||
</div>
|
||||
<div hidden class="tmplt_tab" id="_mate">
|
||||
<center>
|
||||
<p>folgende Mateflaschen sind auf Lager {{ mate }} </p>
|
||||
<p>Bitte Beachte: <b>Erhöhter Koffeingehalt. Für Kinder und schwangere oder stillende Frauen nicht empfolen</b>
|
||||
</p>
|
||||
<details>
|
||||
<summary id="mate">
|
||||
<h4>Mate hinzufügen</h4>
|
||||
</summary>
|
||||
<form class="modal-content animate" action="/mate" method="POST">
|
||||
|
||||
<div class="container" style="margin-top: 2em">
|
||||
<input type="text" placeholder="Mate Flaschen Anzahl" name="mateFlaschen" required>
|
||||
</br>
|
||||
<input type="text" placeholder="Mate Marke" name="mateSorte" required>
|
||||
</br>
|
||||
<input id="mate_sID" type="hidden" placeholder="SessionID" name="sessionID" required>
|
||||
<script type="text/javascript">
|
||||
var sid = sessionStorage.getItem("sessionID")
|
||||
document.getElementById('mate_sID').value = sid;
|
||||
</script>
|
||||
</br>
|
||||
<button type="submit">
|
||||
➕
|
||||
</button>
|
||||
|
||||
</div>
|
||||
</form>
|
||||
</details>
|
||||
<details>
|
||||
<summary id="mate">
|
||||
<h4>Mate trinken</h4>
|
||||
</summary>
|
||||
<form class="modal-content animate" action="/drink" method="POST">
|
||||
|
||||
<div class="container" style="margin-top: 2em">
|
||||
<input type="text" placeholder="Mate Flaschen Anzahl" name="mateFlaschen" required>
|
||||
</br>
|
||||
<input type="text" placeholder="Mate Marke" name="mateSorte" required>
|
||||
</br>
|
||||
<input id="mate_sID" type="hidden" placeholder="SessionID" name="sessionID" required>
|
||||
<script type="text/javascript">
|
||||
var sid = sessionStorage.getItem("sessionID")
|
||||
document.getElementById('mate_sID').value = sid;
|
||||
</script>
|
||||
</br>
|
||||
<button type="submit">
|
||||
🍹
|
||||
</button>
|
||||
|
||||
</div>
|
||||
</form>
|
||||
</details>
|
||||
</center>
|
||||
</div>
|
||||
<div hidden class="tmplt_tab" id="_seession">
|
||||
<center>
|
||||
<h1> Session Information</h1>
|
||||
<img src="/static/img/user.png" width="60" height="60">
|
||||
<p id="user"></p>
|
||||
|
||||
<p>Useranzahl: {{useranzahl}}</p>
|
||||
<p>Uptime: {{der}}</p>
|
||||
|
||||
<p>Creator: Host</p>
|
||||
|
||||
{% endblock %}
|
||||
<form class="modal-content animate" action="/statistik" method="POST">
|
||||
|
||||
<div class="container" style="margin-top: 2em">
|
||||
<input type="text" placeholder="NFSU2" name="game" required>
|
||||
|
||||
<input id="statisk_id" type="hidden" placeholder="SessionID" name="id" required>
|
||||
<script type="text/javascript">
|
||||
var sid = sessionStorage.getItem("sessionID")
|
||||
document.getElementById('statisk_id').value = sid;
|
||||
</script>
|
||||
</br>
|
||||
<button type="submit">
|
||||
Statistik
|
||||
</button>
|
||||
|
||||
</div>
|
||||
</form>
|
||||
<details>
|
||||
<summary id="QR">
|
||||
<h1>QR-Code</h1>
|
||||
</summary>
|
||||
|
||||
<img src="../static/img/qr.png">
|
||||
</details>
|
||||
</center>
|
||||
</div>
|
||||
<div hidden class="tmplt_tab" id="_controll">
|
||||
<center>
|
||||
<div id="LED">
|
||||
<h3>Setze eine Fabe für die LEDs</h3>
|
||||
<label for="colorpicker">Led Streifen:</label>
|
||||
<input type="color" id="colorpicker" value="#0000ff">
|
||||
</div>
|
||||
<div id="userVerwaltung">
|
||||
<h3>User Verwaltung</h3>
|
||||
<table>
|
||||
<tr>
|
||||
<th>UserID</th>
|
||||
<th>User</th>
|
||||
<th>Status</th>
|
||||
</tr>
|
||||
{% for i in range(userdat.unames|length) %}
|
||||
<tr>
|
||||
<td>{{ userdat.unames[i] }}</td>
|
||||
<td>{{ userdat.uids[i] }}</td>
|
||||
<td>Online</td>
|
||||
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<button onclick="save()">💾</button>
|
||||
</div>
|
||||
<div hidden class="tmplt_tab" id="_files">
|
||||
<form method="post" enctype="multipart/form-data">
|
||||
<input type="file" name="file">
|
||||
<input type="submit" value="Upload">
|
||||
</form>
|
||||
<form class="modal-content animate" action="/upload_file" method="POST">
|
||||
<div class="container" style="margin-top: 2em">
|
||||
<label for="form_file">
|
||||
<input id="form_file" type="file">
|
||||
<button type="submit">upload</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</center>
|
||||
|
||||
|
||||
<script src="{{url_for('static', filename='js/general.js')}}"></script>
|
||||
<script src="{{url_for('static', filename='js/control.js')}}"></script>
|
||||
<script src="{{url_for('static', filename='js/chat.js')}}"></script>
|
||||
<script src="{{url_for('static', filename='js/game.js')}}"></script>
|
||||
</body>
|
||||
|
||||
<script>
|
||||
function change_div(pfad)
|
||||
{
|
||||
for (var i = 0; i < document.getElementsByClassName("tmplt_tab").length; i++) document.getElementsByClassName("tmplt_tab")[i].hidden = true;
|
||||
console.log(pfad)
|
||||
document.getElementById(pfad).hidden = false;
|
||||
}
|
||||
</script>
|
||||
<script src="{{url_for('static', filename='js/control.js')}}"></script>
|
||||
<script src="{{url_for('static', filename='js/chat.js')}}"></script>
|
||||
<script src="{{url_for('static', filename='js/game.js')}}"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@ -1,13 +0,0 @@
|
||||
<html>
|
||||
<head>
|
||||
<title></title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<link rel="stylesheet" href="{{ url_for('static', filename='../static/css/style.css') }}">
|
||||
</head>
|
||||
<body>
|
||||
<h1>Signin</h1>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
65
templates/spiel.html
Normal file
65
templates/spiel.html
Normal file
@ -0,0 +1,65 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<link rel="stylesheet" href="{{ url_for('static', filename='../static/css/style.css') }}">
|
||||
<title>Spiel</title>
|
||||
</head>
|
||||
<body>
|
||||
<center>
|
||||
<h1>Spiel(e) hinzufügen</h1>
|
||||
<form class="modal-content animate" action="/get_login" method="POST">
|
||||
<div class="container">
|
||||
<label>Spielename : </label>
|
||||
<input id="spielname" type="text" placeholder="Tomb Raider" name="username" required>
|
||||
</br>
|
||||
<label>Genre : </label>
|
||||
<input id="genre" type="text" placeholder="Action-Adventure" name="userID">
|
||||
</br>
|
||||
<label>Erscheinungsjahr : </label>
|
||||
<input id="Erscheinungsjahr" type="text" placeholder="1995" name="userID">
|
||||
</br>
|
||||
<label>Gruppe hinzufügen : </label>
|
||||
<input id="Gruppe" type="text" placeholder="Tomb Raider" name="userID">
|
||||
</br>
|
||||
<label>Teil : </label>
|
||||
<input id="Teil" type="text" placeholder="3" name="userID">
|
||||
</br>
|
||||
<input id="id1"type="hidden" placeholder="Session Id" name="sessionID" required>
|
||||
</br>
|
||||
<label for="spielBild">Bild hochladen</label>
|
||||
<input id="spielBild" type="file">
|
||||
</br>
|
||||
<button type="submit">➕</button>
|
||||
</div>
|
||||
</form>
|
||||
<a href="/logout">
|
||||
<button onclick="window.open('', '_self', ''); window.close();">Close</button>
|
||||
</a>
|
||||
</br>
|
||||
<h2>Bereits hinzugefügte Spiele</h2>
|
||||
<table>
|
||||
<tr>
|
||||
{% block content %}
|
||||
<th>{{spiel}}</th>
|
||||
<th>Genre</th>
|
||||
<th>Erscheinungsjahr</th>
|
||||
<th>Gruppe</th>
|
||||
<th>Teil</th>
|
||||
{% endblock %}
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>f</td>
|
||||
<td>f</td>
|
||||
<td>f</td>
|
||||
<td>f</td>
|
||||
<td>f</td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
</center>
|
||||
</body>
|
||||
</html>
|
||||
1
upload/Dateien/README.md
Normal file
1
upload/Dateien/README.md
Normal file
@ -0,0 +1 @@
|
||||
Hier werden die Hochgeladenen Dateien gelagert
|
||||
1
upload/Musik/README.md
Normal file
1
upload/Musik/README.md
Normal file
@ -0,0 +1 @@
|
||||
Hier wird die hochgeladene Musik gelagert
|
||||
2
upload/README.md
Normal file
2
upload/README.md
Normal file
@ -0,0 +1,2 @@
|
||||
Hier ist Platz für Spiele Dateien
|
||||
Lade sie in deiner Session einfach über den Upload Button hoch!
|
||||
1
upload/Spielstand/README.md
Normal file
1
upload/Spielstand/README.md
Normal file
@ -0,0 +1 @@
|
||||
Hier werden die hochgeladenen Spieldateien gelagert
|
||||
Loading…
x
Reference in New Issue
Block a user