From c4cfb826408fd5a27ac3f772ce4389f71a7ffcbc Mon Sep 17 00:00:00 2001 From: ZKWolf Date: Tue, 12 Sep 2023 16:29:56 +0200 Subject: [PATCH] Added MongoDB Setup, so we don't need Server, Collection and DB in every request. --- src/endpoints/general.py | 5 +- src/endpoints/user_handeling.py | 26 ++++------ src/endpoints/web.py | 6 +-- src/flask_definitions.py | 1 + src/logic/mongodb_handler.py | 85 ++++++++++++++------------------- src/start_app.py | 1 + 6 files changed, 50 insertions(+), 74 deletions(-) diff --git a/src/endpoints/general.py b/src/endpoints/general.py index 3098301..3a0d03e 100644 --- a/src/endpoints/general.py +++ b/src/endpoints/general.py @@ -180,7 +180,7 @@ def consent_eula(): try: if request.method == "PUT": try: - mongo.eula(userId=userid, get_eula=False, server=mongo_host, db=mongo_db, collection=mongo_collection) + mongo.eula(userId=userid, get_eula=False) return jsonify({"Userid": userid, "ConsentList": [{"ConsentId": "ZKApi", "isGiven": True, "UpdatedDate": 1689714606, "AttentionNeeded": False, "LatestVersion": "ZKApi"}]}) @@ -201,8 +201,7 @@ def consent_eula(): if userid == 401: return jsonify({"message": "Endpoint not found"}), 404 is_given = mongo.get_data_with_list(login=userid, login_steam=False, - items={"eula"}, - server=mongo_host, db=mongo_db, collection=mongo_collection) + items={"eula"}) if is_given["eula"]: return "", 204 return jsonify({ diff --git a/src/endpoints/user_handeling.py b/src/endpoints/user_handeling.py index 29035ea..b6a9362 100644 --- a/src/endpoints/user_handeling.py +++ b/src/endpoints/user_handeling.py @@ -4,10 +4,9 @@ from math import ceil from flask_definitions import * import requests -from logic.mongodb_handler import mongo from logic.time_handler import get_time -global steam_api_key, mongo_db, mongo_collection, mongo_host +global steam_api_key def steam_login_function(): @@ -26,7 +25,7 @@ def steam_login_function(): steamid = response.json()["response"]["params"]["steamid"] # owner_id = response.json()["response"]["params"]["result"]["ownersteamid"] # This is providerId - userid, token = mongo.user_db_handler(steamid, mongo_host, mongo_db, mongo_collection) + userid, token = mongo.user_db_handler(steamid) current_time, expire_time = get_time() logger.graylog_logger(level="info", handler="steam_login", message="User {} logged in".format(steamid)) @@ -54,7 +53,7 @@ def steam_login(): if user_agent.startswith("TheExit/++UE4+Release-4.2"): if request.args.get( 'token') == "140000007B7B7B7B02000000E3FA3952010010017B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B": - userid, token = mongo.user_db_handler("Debug_session", mongo_host, mongo_db, mongo_collection) + userid, token = mongo.user_db_handler("Debug_session") current_time, expire_time = get_time() return_val = jsonify({"preferredLanguage": "en", "friendsFirstSync": {"steam": True}, "fixedMyFriendsUserPlatformId": @@ -100,8 +99,7 @@ def modifiers(): userid = session_manager.get_user_id(session_cookie) steamid, token = mongo.get_data_with_list(login=userid, login_steam=False, - items={"token", "steamid"}, server=mongo_host, db=mongo_db, - collection=mongo_collection) + items={"token", "steamid"}) try: return jsonify({"TokenId": token, "UserId": userid, "RoleIds": ["755D4DFE-40DA1512-B01E3D8C-FF3C8D4D", "C50FFFBF-46866131-82F45890-651797CE"]}) @@ -121,7 +119,7 @@ def moderation_check_username(): try: request_var = request.get_json() userid = request_var["userId"] - steamid, token = mongo.get_user_info(userId=userid, server=mongo_host, db=mongo_db, collection=mongo_collection) + steamid, token = mongo.get_user_info(userId=userid) return jsonify({"Id": userid, "Token": token, "Provider": {"ProviderName": request_var["username"], "ProviderId": steamid}}) # CLIENT:{"userId": "ID-ID-ID-ID-SEE-AUTH", "username": "Name-Name-Name"} @@ -283,10 +281,8 @@ def ban_status(): userid = session_manager.get_user_id(session_cookie) try: - time.sleep(0.5) ban_data = mongo.get_data_with_list(login=userid, login_steam=False, - items={"is_banned", "ban_reason", "ban_start", "ban_expire"}, - server=mongo_host, db=mongo_db, collection=mongo_collection) + items={"is_banned", "ban_reason", "ban_start", "ban_expire"}) if ban_data is None: return jsonify({"status": "error"}) elif ban_data["is_banned"]: @@ -334,8 +330,7 @@ def wallet_currencies(): try: currencies = mongo.get_data_with_list(login=userid, login_steam=False, - items={"currency_blood_cells", "currency_iron", "currency_ink_cells"}, - server=mongo_host, db=mongo_db, collection=mongo_collection) + items={"currency_blood_cells", "currency_iron", "currency_ink_cells"}) return jsonify({"List": [{"Currency": "CurrencyA", "Balance": currencies["currency_iron"], "CurrencyGroup": "SoftCurrencyGroup", "LastRefillTimeStamp": "1684862187"}, {"Currency": "CurrencyB", "Balance": currencies["currency_blood_cells"], @@ -399,7 +394,7 @@ def messages_count(): userid = session_manager.get_user_id(session_cookie) try: - unread_message_ids = mongo.get_data_with_list(login=userid, login_steam=False, items={"unread_msg_ids"}, server=mongo_host, db=mongo_db, collection=mongo_collection) + unread_message_ids = mongo.get_data_with_list(login=userid, login_steam=False, items={"unread_msg_ids"}) if unread_message_ids is None: return jsonify({"Count": 0}) else: @@ -421,8 +416,7 @@ def messages_list(): limit = int(request.args.get("limit", 500)) page = int(request.args.get("page", 1)) - unread_message_ids = mongo.get_data_with_list(login=userid, login_steam=False, items={"unread_msg_ids"}, - server=mongo_host, db=mongo_db, collection=mongo_collection) + unread_message_ids = mongo.get_data_with_list(login=userid, login_steam=False, items={"unread_msg_ids"}) ids = [] for items in unread_message_ids.get("unread_msg_ids", []): ids.append(str(items)) @@ -458,8 +452,6 @@ def messages_list(): return jsonify({"messages": [], "NetPage": 0}) - - @app.route("/api/v1/messages/v2/markAs/", methods=["POST"]) def messages_mark_as(): return jsonify("", 204) diff --git a/src/endpoints/web.py b/src/endpoints/web.py index a956d36..038bc81 100644 --- a/src/endpoints/web.py +++ b/src/endpoints/web.py @@ -1,5 +1,4 @@ from flask_definitions import * -from logic.mongodb_handler import mongo @app.route('/', methods=["GET"]) @@ -48,7 +47,7 @@ def debug_user(steamid): if steamid is None: return render_template('debug/user.html', is_id_set=False, id_not_found=True) - user_data = mongo.get_debug(steamid=steamid, server=mongo_host, db=mongo_db, collection=mongo_collection) + user_data = mongo.get_debug(steamid=steamid) if user_data is None: return render_template('debug/user.html', is_id_set=True, id_not_found=False, steam_id=steamid) @@ -100,8 +99,7 @@ def debug_mirrors_write(): logger.graylog_logger(level="info", handler="logging_debug_mirror_write", message={"IP": check_for_game_client("remote"), "steamid": steam_user_id, "data": data_b}) - return_val = mongo.write_data_with_list(steamid=steam_user_id, items_dict=data_b, server=mongo_host, db=mongo_db, - collection=mongo_collection) + return_val = mongo.write_data_with_list(steamid=steam_user_id, items_dict=data_b) if return_val is None: return jsonify({"status": "error", "message": "There was a error on our End. " diff --git a/src/flask_definitions.py b/src/flask_definitions.py index 260c737..1384eb1 100644 --- a/src/flask_definitions.py +++ b/src/flask_definitions.py @@ -3,6 +3,7 @@ from logic.setup_handlers import load_config from logic.logging_handler import logger from logic.global_handlers import session_manager from logic.global_handlers import check_for_game_client +from logic.mongodb_handler import mongo import json import os diff --git a/src/logic/mongodb_handler.py b/src/logic/mongodb_handler.py index 51c52de..1a0a0fe 100644 --- a/src/logic/mongodb_handler.py +++ b/src/logic/mongodb_handler.py @@ -5,16 +5,13 @@ from logic.logging_handler import logger class Mongo: def __init__(self): - self.dyn_server = None - self.dyn_db = None - self.dyn_collection = None - self.dyn_client_db = None + self.dyn_server = "" + self.dyn_db = "" + self.dyn_collection = "" self.default_user_schema = { 'eula': False, 'account_xp': 0, 'prestige_xp': 0, - 'runner_xp': 0, - 'hunter_xp': 0, 'currency_blood_cells': 0, 'currency_iron': 0, 'currency_ink_cells': 0, @@ -29,16 +26,18 @@ class Mongo: 'unread_msg_ids': [] } - def user_db_handler(self, steamid, server, db, collection): + def setup(self, server, db, collection): self.dyn_server = server self.dyn_db = db self.dyn_collection = collection + + def user_db_handler(self, steamid): try: client = pymongo.MongoClient(self.dyn_server) - self.dyn_client_db = client[self.dyn_db] - self.dyn_collection = self.dyn_client_db[self.dyn_collection] + dyn_client_db = client[self.dyn_db] + dyn_collection = dyn_client_db[self.dyn_collection] - existing_document = self.dyn_collection.find_one({'steamid': steamid}) + existing_document = dyn_collection.find_one({'steamid': steamid}) if existing_document: userId = existing_document['userId'] @@ -49,7 +48,7 @@ class Mongo: existing_document[key] = default_value logger.graylog_logger(level="info", handler="mongodb", message=f"New key added to database: {key} for user {steamid}") - self.dyn_collection.replace_one({'steamid': steamid}, existing_document) + dyn_collection.replace_one({'steamid': steamid}, existing_document) client.close() return userId, token @@ -66,7 +65,7 @@ class Mongo: for key, default_value in self.default_user_schema.items(): new_document[key] = default_value - self.dyn_collection.insert_one(new_document) + dyn_collection.insert_one(new_document) logger.graylog_logger(level="info", handler="mongodb", message=f"New user added to database: {steamid}") client.close() return userId, token @@ -74,22 +73,19 @@ class Mongo: logger.graylog_logger(level="error", handler="mongodb_user_db_handler", message=e) return None, None - def eula(self, userId, get_eula, server, db, collection): + def eula(self, userId, get_eula): try: - self.dyn_server = server - self.dyn_db = db - self.dyn_collection = collection client = pymongo.MongoClient(self.dyn_server) - self.dyn_client_db = client[self.dyn_db] - self.dyn_collection = self.dyn_client_db[self.dyn_collection] - existing_document = self.dyn_collection.find_one({'userId': userId}) + dyn_client_db = client[self.dyn_db] + dyn_collection = dyn_client_db[self.dyn_collection] + existing_document = dyn_collection.find_one({'userId': userId}) if existing_document: if get_eula: eula = existing_document['eula'] client.close() return eula else: - self.dyn_collection.update_one({'userId': userId}, {'$set': {'eula': True}}) + dyn_collection.update_one({'userId': userId}, {'$set': {'eula': True}}) client.close() return True else: @@ -99,15 +95,12 @@ class Mongo: logger.graylog_logger(level="error", handler="mongodb_eula", message=e) return None, None - def get_debug(self, steamid, server, db, collection): + def get_debug(self, steamid): try: - self.dyn_server = server - self.dyn_db = db - self.dyn_collection = collection client = pymongo.MongoClient(self.dyn_server) - self.dyn_client_db = client[self.dyn_db] - self.dyn_collection = self.dyn_client_db[self.dyn_collection] - existing_document = self.dyn_collection.find_one({'steamid': steamid}) + dyn_client_db = client[self.dyn_db] + dyn_collection = dyn_client_db[self.dyn_collection] + existing_document = dyn_collection.find_one({'steamid': steamid}) if existing_document: client.close() return existing_document @@ -118,20 +111,17 @@ class Mongo: logger.graylog_logger(level="error", handler="mongodb_get_debug", message=e) return {"status": "error", "message": "Error in mongodb_handler"} - def get_data_with_list(self, login, login_steam, items, server, db, collection): + def get_data_with_list(self, login, login_steam, items): try: document = {} login = f"{login}" - self.dyn_server = server - self.dyn_db = db - self.dyn_collection = collection client = pymongo.MongoClient(self.dyn_server) - self.dyn_client_db = client[self.dyn_db] - self.dyn_collection = self.dyn_client_db[self.dyn_collection] + dyn_client_db = client[self.dyn_db] + dyn_collection = dyn_client_db[self.dyn_collection] if login_steam: - existing_document = self.dyn_collection.find_one({'steamid': login}) + existing_document = dyn_collection.find_one({'steamid': login}) else: - existing_document = self.dyn_collection.find_one({"userId": login}) + existing_document = dyn_collection.find_one({"userId": login}) if existing_document: for item in items: document[item] = existing_document.get(item) @@ -148,19 +138,17 @@ class Mongo: logger.graylog_logger(level="error", handler="mongo_get_data_with_list", message=e) return None - def write_data_with_list(self, steamid, items_dict, server, db, collection): + def write_data_with_list(self, steamid, items_dict): try: steam_id = str(steamid) - self.dyn_db = db - self.dyn_collection = collection - client = pymongo.MongoClient(server) - self.dyn_client_db = client[self.dyn_db] - self.dyn_collection = self.dyn_client_db[self.dyn_collection] - existing_document = self.dyn_collection.find_one({'steamid': steamid}) + client = pymongo.MongoClient(self.dyn_server) + dyn_client_db = client[self.dyn_db] + dyn_collection = dyn_client_db[self.dyn_collection] + existing_document = dyn_collection.find_one({'steamid': steamid}) if existing_document: update_query = {'$set': items_dict} - self.dyn_collection.update_one({'steamid': steamid}, update_query) + dyn_collection.update_one({'steamid': steamid}, update_query) client.close() return {"status": "success", "message": "Data updated"} else: @@ -172,15 +160,12 @@ class Mongo: logger.graylog_logger(level="error", handler="mongo_write_data_with_list", message=e) return None - def get_user_info(self, userId, server, db, collection): + def get_user_info(self, userId): # TEMPORARY try: - dyn_server = server - dyn_db = db - dyn_collection = collection - client = pymongo.MongoClient(dyn_server) - dyn_db = client[dyn_db] - dyn_collection = dyn_db[dyn_collection] + client = pymongo.MongoClient(self.dyn_server) + dyn_db = client[self.dyn_db] + dyn_collection = dyn_db[self.dyn_collection] existing_document = dyn_collection.find_one({'userId': userId}) if existing_document: steamid = existing_document['steamid'] diff --git a/src/start_app.py b/src/start_app.py index 9cb5fc4..f34c320 100644 --- a/src/start_app.py +++ b/src/start_app.py @@ -47,4 +47,5 @@ def keep_alive(): # main # ------------------------------------------------------- # logger.setup_graylog(use_graylog, graylog_server) +mongo.setup(mongo_host, mongo_db, mongo_collection) keep_alive()