Added MongoDB Setup, so we don't need Server, Collection and DB in every request.

This commit is contained in:
ZKWolf 2023-09-12 16:29:56 +02:00
parent 50f4d6f7b1
commit c4cfb82640
6 changed files with 50 additions and 74 deletions

View File

@ -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({

View File

@ -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)

View File

@ -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. "

View File

@ -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

View File

@ -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']

View File

@ -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()