modified: app.py

This commit is contained in:
SimolZimol
2024-10-25 09:52:56 +02:00
parent 2a94e19cbb
commit 488b0903fe

58
app.py
View File

@@ -2,7 +2,7 @@ __version__ = "dev-0.4.6"
__all__ = ["Discordbot-chatai-webpanel (Discord)"] __all__ = ["Discordbot-chatai-webpanel (Discord)"]
__author__ = "SimolZimol" __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 from requests_oauthlib import OAuth2Session
import os import os
import subprocess import subprocess
@@ -159,6 +159,17 @@ def login():
session['oauth_state'] = state session['oauth_state'] = state
return redirect(authorization_url) 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") @app.route("/callback")
def callback(): def callback():
"""Verarbeitet den OAuth2-Rückruf von Discord.""" """Verarbeitet den OAuth2-Rückruf von Discord."""
@@ -194,10 +205,7 @@ def callback():
bot_admin_data = cursor.fetchone() bot_admin_data = cursor.fetchone()
# Speichere Admin-Rechte in der Session # Speichere Admin-Rechte in der Session
if bot_admin_data and bot_admin_data['global_permission'] >= 8: session['is_admin'] = bool(bot_admin_data and bot_admin_data['global_permission'] >= 8)
session['is_admin'] = True
else:
session['is_admin'] = False
cursor.close() cursor.close()
connection.close() connection.close()
@@ -238,9 +246,8 @@ def user_server_data(guild_id):
@app.route("/server_admin_dashboard/<int:guild_id>") @app.route("/server_admin_dashboard/<int:guild_id>")
def server_admin_dashboard(guild_id): def server_admin_dashboard(guild_id):
"""Serverbasiertes Admin-Dashboard für server-spezifische Admin-Rechte""" """Serverbasiertes Admin-Dashboard für server-spezifische Admin-Rechte"""
user_info = session.get("discord_user") if g.user_info:
if user_info: user_id = g.user_info["id"]
user_id = user_info["id"]
# Überprüfe, ob der Benutzer Admin-Rechte auf dem spezifischen Server hat # Überprüfe, ob der Benutzer Admin-Rechte auf dem spezifischen Server hat
connection = get_db_connection() connection = get_db_connection()
@@ -261,13 +268,11 @@ def server_admin_dashboard(guild_id):
return redirect(url_for("user_landing_page")) return redirect(url_for("user_landing_page"))
@app.route("/user_dashboard/<int:guild_id>") @app.route("/user_dashboard/<int:guild_id>")
def user_dashboard(guild_id): def user_dashboard(guild_id):
"""Serverbasiertes User-Dashboard""" """Serverbasiertes User-Dashboard"""
user_info = session.get("discord_user") if g.user_info:
if user_info: user_id = g.user_info["id"]
user_id = user_info["id"]
# Hole die serverbezogenen Nutzerdaten # Hole die serverbezogenen Nutzerdaten
connection = get_db_connection() connection = get_db_connection()
@@ -280,16 +285,15 @@ def user_dashboard(guild_id):
connection.close() connection.close()
if user_data: 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/<int:guild_id>") @app.route("/server_giveaways/<int:guild_id>")
def server_giveaways(guild_id): def server_giveaways(guild_id):
"""Serverbasiertes Giveaway-Management""" """Serverbasiertes Giveaway-Management"""
user_info = session.get("discord_user") if g.user_info:
if user_info: user_id = g.user_info["id"]
user_id = user_info["id"]
# Überprüfe, ob der Benutzer Admin-Rechte auf diesem Server hat # Überprüfe, ob der Benutzer Admin-Rechte auf diesem Server hat
connection = get_db_connection() connection = get_db_connection()
@@ -313,26 +317,18 @@ def server_giveaways(guild_id):
@app.route("/user_landing_page") @app.route("/user_landing_page")
def user_landing_page(): def user_landing_page():
"""Zeigt die globale Benutzerdaten und die Liste der Server an.""" """Zeigt die globale Benutzerdaten und die Liste der Server an."""
if "discord_user" in session and "discord_guilds" in session: if g.user_info and "discord_guilds" in session:
user_info = session["discord_user"]
guilds = session["discord_guilds"] guilds = session["discord_guilds"]
return render_template("user_landing_page.html", user_info=g.user_info, guilds=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 redirect(url_for("landing_page")) return redirect(url_for("landing_page"))
@app.route("/global_admin_dashboard") @app.route("/global_admin_dashboard")
def global_admin_dashboard(): def global_admin_dashboard():
"""Globales Admin-Dashboard nur für globale Admins""" """Globales Admin-Dashboard nur für globale Admins"""
if session.get("is_admin"): if g.is_admin:
user_info = session['discord_user']
bot_running = bot_status() # Funktion, die den Status des Bots prüft 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=g.user_info, bot_running=bot_running)
return render_template("global_admin_dashboard.html", user_info=user_info, bot_running=bot_running, guild_id=guild_id)
return redirect(url_for("user_landing_page")) return redirect(url_for("user_landing_page"))
@app.route("/logout") @app.route("/logout")
@@ -344,14 +340,14 @@ def logout():
# Bot Management Routes # Bot Management Routes
@app.route("/start_bot") @app.route("/start_bot")
def start(): def start():
if is_bot_admin(): if g.is_admin:
start_bot() start_bot()
return redirect(url_for("global_admin_dashboard")) return redirect(url_for("global_admin_dashboard"))
return redirect(url_for("landing_page")) return redirect(url_for("landing_page"))
@app.route("/stop_bot") @app.route("/stop_bot")
def stop(): def stop():
if is_bot_admin(): if g.is_admin:
stop_bot() stop_bot()
return redirect(url_for("global_admin_dashboard")) return redirect(url_for("global_admin_dashboard"))
return redirect(url_for("landing_page")) return redirect(url_for("landing_page"))