diff --git a/app.py b/app.py index d650b18..afd4e32 100644 --- a/app.py +++ b/app.py @@ -2,7 +2,7 @@ __version__ = "dev-0.4.6" __all__ = ["Discordbot-chatai-webpanel (Discord)"] __author__ = "SimolZimol" -from flask import Flask, render_template, redirect, url_for, request, session, jsonify, send_file, flash +from flask import Flask, render_template, redirect, url_for, request, session, jsonify, send_file, flash, g from requests_oauthlib import OAuth2Session import os import subprocess @@ -159,6 +159,17 @@ def login(): session['oauth_state'] = state return redirect(authorization_url) +@app.before_request +def load_user_data(): + """Lädt Benutzerdaten vor jeder Anfrage für geschützte Routen.""" + if "discord_user" in session: + g.user_info = session["discord_user"] + g.is_admin = session.get("is_admin", False) + else: + # Falls der Benutzer nicht eingeloggt ist, keine Daten setzen + g.user_info = None + g.is_admin = False + @app.route("/callback") def callback(): """Verarbeitet den OAuth2-Rückruf von Discord.""" @@ -194,10 +205,7 @@ def callback(): bot_admin_data = cursor.fetchone() # Speichere Admin-Rechte in der Session - if bot_admin_data and bot_admin_data['global_permission'] >= 8: - session['is_admin'] = True - else: - session['is_admin'] = False + session['is_admin'] = bool(bot_admin_data and bot_admin_data['global_permission'] >= 8) cursor.close() connection.close() @@ -238,9 +246,8 @@ def user_server_data(guild_id): @app.route("/server_admin_dashboard/") def server_admin_dashboard(guild_id): """Serverbasiertes Admin-Dashboard für server-spezifische Admin-Rechte""" - user_info = session.get("discord_user") - if user_info: - user_id = user_info["id"] + if g.user_info: + user_id = g.user_info["id"] # Überprüfe, ob der Benutzer Admin-Rechte auf dem spezifischen Server hat connection = get_db_connection() @@ -261,13 +268,11 @@ def server_admin_dashboard(guild_id): return redirect(url_for("user_landing_page")) - @app.route("/user_dashboard/") def user_dashboard(guild_id): """Serverbasiertes User-Dashboard""" - user_info = session.get("discord_user") - if user_info: - user_id = user_info["id"] + if g.user_info: + user_id = g.user_info["id"] # Hole die serverbezogenen Nutzerdaten connection = get_db_connection() @@ -280,16 +285,15 @@ def user_dashboard(guild_id): connection.close() if user_data: - return render_template("user_dashboard.html", user_info=user_info, user_data=user_data, guild_id=guild_id) + return render_template("user_dashboard.html", user_info=g.user_info, user_data=user_data, guild_id=guild_id) - return redirect(url_for("user_landing_page")) + return redirect(url_for("landing_page")) @app.route("/server_giveaways/") def server_giveaways(guild_id): """Serverbasiertes Giveaway-Management""" - user_info = session.get("discord_user") - if user_info: - user_id = user_info["id"] + if g.user_info: + user_id = g.user_info["id"] # Überprüfe, ob der Benutzer Admin-Rechte auf diesem Server hat connection = get_db_connection() @@ -313,26 +317,18 @@ def server_giveaways(guild_id): @app.route("/user_landing_page") def user_landing_page(): """Zeigt die globale Benutzerdaten und die Liste der Server an.""" - if "discord_user" in session and "discord_guilds" in session: - user_info = session["discord_user"] + if g.user_info and "discord_guilds" in session: guilds = session["discord_guilds"] - - # Debug-Ausgabe - print(f"User Info in Session: {user_info}") - print(f"Guilds in Session: {guilds}") - - return render_template("user_landing_page.html", user_info=user_info, guilds=guilds) + return render_template("user_landing_page.html", user_info=g.user_info, guilds=guilds) return redirect(url_for("landing_page")) @app.route("/global_admin_dashboard") def global_admin_dashboard(): """Globales Admin-Dashboard nur für globale Admins""" - if session.get("is_admin"): - user_info = session['discord_user'] + if g.is_admin: bot_running = bot_status() # Funktion, die den Status des Bots prüft - guild_id = None # Stelle sicher, dass guild_id korrekt zugewiesen ist - return render_template("global_admin_dashboard.html", user_info=user_info, bot_running=bot_running, guild_id=guild_id) + return render_template("global_admin_dashboard.html", user_info=g.user_info, bot_running=bot_running) return redirect(url_for("user_landing_page")) @app.route("/logout") @@ -344,14 +340,14 @@ def logout(): # Bot Management Routes @app.route("/start_bot") def start(): - if is_bot_admin(): + if g.is_admin: start_bot() return redirect(url_for("global_admin_dashboard")) return redirect(url_for("landing_page")) @app.route("/stop_bot") def stop(): - if is_bot_admin(): + if g.is_admin: stop_bot() return redirect(url_for("global_admin_dashboard")) return redirect(url_for("landing_page"))