Added a BAN Admin tool for easy usage as EPOCH has been used wrong often.

This commit is contained in:
zkwolf 2024-05-13 15:09:59 +02:00
parent 6999311c42
commit 31915f1a5e
4 changed files with 158 additions and 6 deletions

View File

@ -193,6 +193,48 @@ def tick_circle():
logger.graylog_logger(level="error", handler="general-tick-circle-png", message=e)
@app.route("/admin/ban", methods=["POST", "GET"])
def admin_ban():
if request.method == "POST":
login_token = sanitize_input(request.form.get("login_token"))
if login_token is None:
return jsonify({"status": "error", "message": "No api token found"}), 401
if login_token not in allowed_tokens:
ip = check_for_game_client("remote")
logger.graylog_logger(level="error", handler="web_admin_ban", message={"IP": ip, "message": "Invalid api token"})
error_message = "Invalid api token"
return render_template('ban.html', error=error_message)
chosen_date = sanitize_input(request.form.get("datetime"))
ban_reason = sanitize_input(request.form.get("ban_reason"))
steam_id = sanitize_input(request.form.get("steam_id"))
if not chosen_date or not ban_reason or not steam_id:
error_message = "Please fill out all fields."
return render_template('ban.html', error=error_message)
try:
create_epoch, expire_epoch = create_ban_time(chosen_date)
except Exception as e:
logger.graylog_logger(level="error", handler="web_admin_ban", message=e)
error_message = "An Error occurred. Are you sure the date is correct?"
return render_template('ban.html', error=error_message)
ret = mongo.write_data_with_list(login=steam_id,
login_steam=True,
items_dict={"is_banned": True,
"ban_reason": ban_reason,
"ban_start": create_epoch,
"ban_expire": expire_epoch})
if ret:
success_message = "User banned successfully."
return render_template('ban.html', success=success_message)
else:
error_message = "An Error occurred. Are you sure the SteamID is correct?"
return render_template('ban.html', error=error_message)
elif request.method == "GET":
return render_template('ban.html')
else:
return abort(405)
@app.route("/debug", methods=["Get"])
def debug_root():
check_for_game_client("soft")
@ -263,7 +305,8 @@ def debug_mirrors_write():
return jsonify({"status": "error", "message": "No Steamid found."}), 400
logger.graylog_logger(level="info", handler="logging_debug_mirror_write",
message={"IP": check_for_game_client("remote"), "steamid": steam_user_id, "data": data_b})
message={"IP": check_for_game_client("remote"), "steamid": steam_user_id,
"data": data_b})
return_val = mongo.write_data_with_list(login=steam_user_id, login_steam=True, items_dict=data_b)
@ -373,7 +416,8 @@ def updater_files():
@app.route("/updater/files/pak/", methods=["GET"])
def updater_pak():
try:
return send_from_directory(os.path.join(app.root_path, 'files'), 'TheExitRebirthBackendAPI-WindowsNoEditor_P.pak')
return send_from_directory(os.path.join(app.root_path, 'files'),
'TheExitRebirthBackendAPI-WindowsNoEditor_P.pak')
except TimeoutError:
return jsonify({"status": "error"})
except Exception as e:
@ -383,7 +427,8 @@ def updater_pak():
@app.route("/updater/files/sig/", methods=["GET"])
def updater_sig():
try:
return send_from_directory(os.path.join(app.root_path, 'files'), 'TheExitRebirthBackendAPI-WindowsNoEditor_P.sig')
return send_from_directory(os.path.join(app.root_path, 'files'),
'TheExitRebirthBackendAPI-WindowsNoEditor_P.sig')
except TimeoutError:
return jsonify({"status": "error"})
except Exception as e:
@ -497,7 +542,7 @@ def download(file_id):
#file = file_handler.get_file(file_id)
file = None
if file is None:
return jsonify({"status": "error", "message": "File not found."}), 404
return jsonify({"status": "error", "message": "File not found."}), 404
return file
except TimeoutError:
return jsonify({"status": "error"})
@ -532,4 +577,4 @@ def sha256(file_id):
except TimeoutError:
return jsonify({"status": "error"})
except Exception as e:
logger.graylog_logger(level="error", handler="web-sha256", message=e)
logger.graylog_logger(level="error", handler="web-sha256", message=e)

View File

@ -6,7 +6,7 @@ from logic.global_handlers import check_for_game_client
from logic.global_handlers import sanitize_input
from logic.mongodb_handler import mongo
from logic.webhook_handler import discord_webhook
from logic.time_handler import get_lifetime
from logic.time_handler import get_lifetime, create_ban_time
# from logic.challenge_handler import get_progression_batch, update_progression_batch, get_time_based_challenges
from logic.hash_handler import hash_handler
from logic.challenge_handler_new import new_challenge_handler, get_challenge_ids_from_inventory

View File

@ -45,3 +45,12 @@ def get_lifetime(challenge_type):
except Exception as e:
logger.error("Error in time_handler -> " + str(e))
return None
def create_ban_time(date):
date_string = date.replace('%3A', ':')
date_object = datetime.datetime.strptime(date_string, "%Y-%m-%dT%H:%M")
epoch_time = int(date_object.timestamp())
current_epoch_time = int(datetime.datetime.now().timestamp())
return current_epoch_time, epoch_time

98
src/templates/ban.html Normal file
View File

@ -0,0 +1,98 @@
<!DOCTYPE html>
<html>
<head>
<title>Admin Ban Tool</title>
<style>
body {
background-color: #333;
color: white;
font-family: Arial, sans-serif;
}
form {
width: 50%;
margin: 0 auto;
background-color: #444;
padding: 20px;
border-radius: 10px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);
}
label {
display: block;
margin-bottom: 10px;
}
input[type="text"],
input[type="datetime-local"] {
width: 100%;
padding: 8px;
margin-bottom: 15px;
border-radius: 5px;
border: 1px solid #666;
background-color: #555;
color: white;
box-sizing: border-box;
}
input[type="submit"] {
background-color: #007bff;
color: white;
padding: 10px 20px;
border: none;
border-radius: 5px;
cursor: pointer;
}
input[type="submit"]:hover {
background-color: #0056b3;
}
.success {
background-color: #28a745;
color: white;
padding: 10px;
margin-bottom: 15px;
border-radius: 5px;
}
.error {
background-color: #dc3545;
color: white;
padding: 10px;
margin-bottom: 15px;
border-radius: 5px;
}
</style>
</head>
<body>
{% if success %}
<div class="success">
{{ success }}
</div>
{% endif %}
{% if error %}
<div class="error">
{{ error }}
</div>
{% endif %}
<h2 style="text-align: center;">Administration Tool: Ban User</h2>
<form method="POST">
<label for="datetime">Ban end:</label>
<input type="datetime-local" id="datetime" name="datetime" required><br><br>
<label for="ban_reason">Ban Reason:</label>
<input type="text" id="ban_reason" name="ban_reason" required><br><br>
<label for="login_token">API Token:</label>
<input type="text" id="login_token" name="login_token" required><br><br>
<label for="steam_id">Steam ID:</label>
<input type="text" id="steam_id" name="steam_id" required><br><br>
<input type="submit" value="Submit">
</form>
</body>
</html>