diff --git a/main.py b/main.py index 38ca25d..eb8def6 100644 --- a/main.py +++ b/main.py @@ -1,369 +1,17 @@ -from crypt import methods -from fileinput import filename -import queue, sqlite3, time, atexit, sys, uuid, json, urllib.parse, logging, datetime, os -from flask import Flask, render_template, request, make_response, session, url_for -from flask_socketio import SocketIO, join_room, leave_room -from flask_session import Session -from markupsafe import escape +from venv import create +from Website import create_app +from flask_socketio import SocketIO +import atexit, sqlite3, sys, datetime, logging -#db_config test -db_path = 'mate.db' -conn = sqlite3.connect(db_path, check_same_thread=False) -c = conn.cursor() - -#flask_config -app = Flask(__name__) -key = str(uuid.uuid4().hex) -app.config['SESSION_TYPE'] = 'filesystem' -app.config['SECRET_KEY'] = key -Session(app) -socketio = SocketIO(app) - -#logging_config -now = datetime.datetime.now().strftime('%d-%m-%Y-%H-%M-%S') -logging.basicConfig(filename=f"logs/matekasse-{now}.log",filemode='w', format='%(asctime)s - %(name)s - %(levelname)s - %(message)s' ,encoding='utf-8', level=logging.INFO) -db_log = logging.getLogger('db') -website_log = logging.getLogger('website') - -#var -status = True -users = queue.Queue() -finished = None -message = None - -def exit_handler(): - conn.commit() - conn.close() - website_log.info("Website exited") +def exit_handler(): sys.exit("Program sucsesfully exited") -#website -@app.route('/favicon.ico') -def favicon(): - return url_for('static', filename='Logo_CCC.svg.png') - -@app.route('/socket.io.js') -def socketiojs(): - return url_for('static', filename='socket.io.js') - -@app.route("/") -def index(): - return """ - user and tag list -
The creator of this website accepts no liability for any linguistic or technical errors!
-{escape(i[1])}: {i[2]}
user and tag list | Documentation
-1 Credit = 1,50 Euro
- - -{tag[0]}
" - return f""" - - - -user and tag list | Documentation
-{escape(user[1])} : {user[2]}
-
- - - -Tags:
- {text} -user and tag list | Documentation
Do your realy want to remove the user
' - -@app.route("/removeuser", methods=['GET']) -def remove_user(): - user_id = request.args.get("id") - c.execute(f"SELECT * FROM users WHERE id=?", [user_id]) - users = c.fetchall() - if users != []: - user_name = users[0][1] - c.execute(f"DELETE FROM tags WHERE userid=?", [user_id]) - db_log.info(f"Deleted all tags from user ?", [user_id]) - c.execute(f"DELETE FROM users WHERE id=?", [user_id]) - db_log.info(f"Deleted user ?", [user_id]) - conn.commit() - socketio.emit("update", "update") - return f'user and tag list | Documentation
Deleted user {escape(user_name)}
return to the tags and user list' - else: - return "Error: 043" - -@app.route("/adduser/user", methods=['GET']) -def adduser(): - username = request.args.get("username") - c.execute("SELECT * FROM users WHERE username=?", [username]) - if c.fetchall() == []: - c.execute("INSERT or IGNORE INTO users (username, balance) VALUES (?, 0)", [username]) - conn.commit() - socketio.emit("update", "update") - c.execute(f"SELECT * FROM users WHERE username=?", [username]) - user = c.fetchall()[0] - db_log.info(f"Added user id: {user[0]} name: {user[2]}") - return """ - - - - """ - else: - return 'user and tag list | Documentation
Error: 170
' - - -@app.route("/change", methods=['GET']) -def change(): - try: - user_id = request.args.get("id") - change = int(request.args.get("change")) - except: - return 'Error: 095
tags and user list' - c.execute(f"SELECT * FROM users WHERE id=?", [user_id]) - users = c.fetchall() - if users != []: - balance_old = users[0][2] - c.execute(f"UPDATE users SET balance = balance + {change} WHERE id={user_id}") - conn.commit() - c.execute(f"SELECT * FROM users WHERE id={user_id}") - user = c.fetchall()[0] - db_log.info(f"Changed the balance from user {user[0]} from {balance_old} to {user[2]}") - socketio.emit("update", "update") - return """ - - - - """ - else: - return 'user and tag list | Documentation
Error: 043
' - -@app.route("/addtag", methods=['GET']) -def get_addtag_request(): - global users - try: - user_id = int(request.args.get("id")) - except: #except im Normalen Code! - return "Error: 095" - session_id = uuid.uuid4() - session[id] = session_id - users.put([user_id, "add", session_id]) - return render_template("addtag.html", user=user_id) - -@socketio.on('addtag') -def request_addtag(data): - global finished - global message - join_room(session[id]) - if len(users.queue) > 0: - user = users.queue[len(users.queue) - 1] - if user == [data["data"], "add", session[id]]: - socketio.emit("wait", "wait", to=session[id]) - i = 0 - while finished != [data["data"], "add", session[id]]: - time.sleep(1) - i += 1 - if i > 20: - socketio.emit("error", "352", to=session[id]) - notimportant = users.get() - break - else: - finished = None - socketio.emit("finished", f"{message}", to=session[id]) - - else: - socketio.emit("busy", "busy", to=session[id]) - else: - socketio.emit("error", "418", to=session[id]) - leave_room(session[id]) - -@app.route("/removetag", methods=['GET']) -def get_removetag_request(): - global users - try: - user_id = int(request.args.get("id")) - except: #except im Normalen Code! - return "Wrong user id!" - session_id = uuid.uuid4() - session[id] = session_id - users.put([user_id, "remove", session_id]) - return render_template("removetag.html", user=user_id) - -@socketio.on('removetag') -def request_removetag(data): - global finished - global message - join_room(session[id]) - if len(users.queue) > 0: - queue_item = users.queue[len(users.queue) - 1] - user = queue_item[0] - if queue_item == [data["data"], "remove", session[id]]: - socketio.emit("wait", "wait", to=session[id]) - i = 0 - while finished != [data["data"], "remove", session[id]]: - time.sleep(1) - i += 1 - if i > 20: - socketio.emit("error", "352", to=session[id]) - notimportant = users.get() - break - else: - finished = None - socketio.emit("finished", f"{message}", to=session[id]) - else: - socketio.emit("busy", "busy", to=session[id]) - else: - socketio.emit("error", "418", to=session[id]) - leave_room(session[id]) - -#api -@app.route("/api/change", methods=['GET']) -def api_change(): - userid = request.args.get("id") - c.execute("SELECT * FROM users WHERE id=?", [userid]) - user_list = c.fetchall() - if user_list != []: - user = user_list[0] - try: - change = int(request.args.get("change")) - except: - return make_response(json.dumps({"mode":"error","error":"095"})) - if change == None: - change = 1 - c.execute(f"UPDATE users SET balance = balance + {change} WHERE id={user[0]}") - c.execute(f"SELECT * FROM users WHERE id = {userid}") - user_new = c.fetchall()[0] - db_log.info(f"Changed the balance from user {user[0]} from {user[2]} to {user_new[2]}") - socketio.emit("update", "update") - return make_response(json.dumps({"mode":"balance", "username":user[1], "balance":user[2]})) - else: - return make_response(json.dumps({"mode":"error","error":"043"})) - - -@app.route("/api/tag_id", methods=['GET']) -def get_id(): - global finished - global message - tag_id = request.args.get("id") - c.execute(f"SELECT * FROM tags WHERE tagid=?", [tag_id]) - - tag_list = c.fetchall() - if users.qsize() > 0: - queue_item = users.get() - user = queue_item[0] - state = queue_item[1] - c.execute(f"SELECT * FROM users WHERE id=?", [user]) - username = c.fetchall()[0][1] - if state == "add": - c.execute(f"SELECT * FROM tags WHERE tagid={tag_id}") - if c.fetchall() != []: - message = "Error: 170" - finished = queue_item - return make_response(json.dumps({"mode":"error","error":"170"})) - else: - c.execute(f"INSERT OR IGNORE INTO tags (tagid, userid) VALUES ({tag_id}, ?)", [user]) - message = f"Added {tag_id} to {username}" - db_log.info(message) - finished = queue_item - conn.commit() - return make_response(json.dumps({"mode":"message","username":"%s".format(username),"message":"A tag was added"})) - elif state == "remove": - c.execute(f"SELECT * FROM tags WHERE (tagid = {tag_id} AND userid = ?)", [user]) - tags = c.fetchall() - if tags != []: - c.execute(f"DELETE FROM tags WHERE (tagid = {tag_id} AND userid = ?)", [user]) - message = f"Removed {tag_id} from {username}" - db_log.info(message) - finished = queue_item - conn.commit() - return make_response(json.dumps({"mode":"message","username":"%s".format(username),"message":"A tag was removed"})) - else: - message = "054" - finished = queue_item - return make_response(json.dumps({"mode":"error","error":"054"})) - finished = queue_item - socketio.emit("update", "update") - return make_response(json.dumps({"mode":"error","error":"418"})) - - elif tag_list != []: - tag = tag_list[0] - c.execute(f"SELECT * FROM users WHERE id={tag[1]}") - user_list = c.fetchall() - if user_list != []: - balance_old = user_list[0][2] - if users.qsize() == 0: - c.execute(f"UPDATE users SET balance = balance - 1 WHERE id={tag[1]}") - conn.commit() - c.execute(f"SELECT * FROM users WHERE id={tag[1]}") - user = c.fetchall()[0] - db_log.info(f"Changed the balance from user {user[0]} from {balance_old} to {user[2]}") - socketio.emit("update", "update") - return make_response(json.dumps({"mode":"balance", "username":user[1], "balance":user[2]})) - else: - return make_response(json.dumps({"mode":"error", "error":"043"})) - socketio.emit("update", "update") - return make_response(json.dumps({"mode":"error","error":"054"})) - -#Documentation -@app.route("/documentation") -def documentation(): - return render_template("documentation.html") - def main(): - atexit.register(exit_handler) - website_log.info("Website is starting") - socketio.run(app, host='0.0.0.0', port=5000, cors_allowed_origins="*") \ No newline at end of file + app_data = create_app() + app = app_data["app"] + socketio = app_data["socketio"] + atexit.register(exit_handler) + socketio.run(app, host='0.0.0.0', port=5000) + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 8a96711..3fc4414 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,16 @@ -flask -flask_socketio +bidict==0.22.1 +blinker==1.6.2 +click==8.1.6 +coverage==7.2.7 +Flask==2.3.2 +Flask-SocketIO==5.3.4 +iniconfig==2.0.0 +itsdangerous==2.1.2 +Jinja2==3.1.2 +MarkupSafe==2.1.3 +packaging==23.1 +pluggy==1.2.0 +pytest==7.4.0 +python-engineio==4.5.1 +python-socketio==5.8.0 +Werkzeug==2.3.6 diff --git a/templates/addtag.html b/templates/addtag.html deleted file mode 100644 index 98b5c17..0000000 --- a/templates/addtag.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - \ No newline at end of file diff --git a/templates/adduser.html b/templates/adduser.html deleted file mode 100644 index e71c038..0000000 --- a/templates/adduser.html +++ /dev/null @@ -1,8 +0,0 @@ - - -user and tag list | Documentation
-- Username: -
- - \ No newline at end of file diff --git a/templates/base.html b/templates/base.html deleted file mode 100644 index 0925b8d..0000000 --- a/templates/base.html +++ /dev/null @@ -1,17 +0,0 @@ - - - --
http://matekasse.server.c3h/api/tag_id?={tag_id}
-Response: - {"mode":"error" "error":"{error}"} or - {"mode":"message","username":"{username}","message":"{message}"} or - {"mode":"balance", "username":"{username}", "balance":"{balance}"} -
-http://matekasse.server.c3h/api/change?id={user_id}&?change={change}
-- If change = None the change will be 1 -
-- Response: - {"mode":"error" "error":"{error}"} or - {"mode":"balance", "username":"{username}", "balance":"{balance}"} -
-170: Tag already exists
-054: Tag does not exists
-757: Usere already exists
-043: User does not exists
-352: Timeout
-095: Input is not a Number
-418: I'm a teapot
-