modified: web/blueprints/auth.py

modified:   web/blueprints/group_admin.py
	modified:   web/blueprints/panel.py
	modified:   web/blueprints/site_admin.py
	modified:   web/templates/admin/base.html
	modified:   web/templates/admin/dashboard.html
	modified:   web/templates/admin/group_edit.html
	modified:   web/templates/admin/group_members.html
	modified:   web/templates/admin/groups.html
	modified:   web/templates/admin/user_edit.html
	modified:   web/templates/admin/users.html
	modified:   web/templates/auth/admin_login.html
	modified:   web/templates/auth/login.html
	modified:   web/templates/base.html
	modified:   web/templates/group_admin/base.html
	modified:   web/templates/group_admin/dashboard.html
	modified:   web/templates/group_admin/database.html
	modified:   web/templates/group_admin/member_edit.html
	modified:   web/templates/group_admin/members.html
	modified:   web/templates/panel/no_db.html
This commit is contained in:
SimolZimol
2026-04-01 02:55:32 +02:00
parent 93999d1c0d
commit c9c684f97a
21 changed files with 4633 additions and 184 deletions

View File

@@ -17,17 +17,17 @@ def login():
if request.method == "POST":
user = check_login(request.form.get("username", ""), request.form.get("password", ""))
if user and user["is_site_admin"]:
flash("Bitte nutze den Site-Admin-Login.", "warning")
flash("Please use the Site Admin login.", "warning")
return redirect(url_for("auth.admin_login"))
if user:
groups = get_user_groups(user["id"])
if not groups:
error = "Du bist keiner Gruppe zugewiesen. Wende dich an einen Admin."
error = "You are not assigned to any group. Please contact an admin."
else:
_set_user_session(user, groups)
return redirect(url_for("panel.dashboard"))
else:
error = "Falscher Benutzername oder Passwort."
error = "Incorrect username or password."
return render_template("auth/login.html", error=error)
@@ -46,9 +46,9 @@ def admin_login():
session["permissions"] = {}
return redirect(url_for("site_admin.dashboard"))
elif user:
error = "Keine Site-Admin-Berechtigung."
error = "No Site Admin privileges."
else:
error = "Falscher Benutzername oder Passwort."
error = "Incorrect username or password."
return render_template("auth/admin_login.html", error=error)
@@ -66,7 +66,7 @@ def switch_group(group_id):
groups = get_user_groups(user_id)
target = next((g for g in groups if g["id"] == group_id), None)
if not target:
flash("Gruppe nicht gefunden oder kein Zugriff.", "danger")
flash("Group not found or no access.", "danger")
return redirect(url_for("panel.dashboard"))
_apply_group(target)
return redirect(url_for("panel.dashboard"))

View File

@@ -11,15 +11,15 @@ group_admin = Blueprint("group_admin", __name__, url_prefix="/group-admin")
ALL_PERMISSIONS = [
("view_dashboard", "Dashboard"),
("view_players", "Spieler"),
("view_players", "Players"),
("view_sessions", "Sessions"),
("view_chat", "Chat"),
("view_commands", "Commands"),
("view_deaths", "Tode"),
("view_blocks", "Block-Events"),
("view_proxy", "Proxy-Events"),
("view_server_events", "Server-Events"),
("view_perms", "Berechtigungen"),
("view_deaths", "Deaths"),
("view_blocks", "Block Events"),
("view_proxy", "Proxy Events"),
("view_server_events", "Server Events"),
("view_perms", "Permissions"),
]
@@ -31,7 +31,7 @@ def group_admin_required(f):
if session.get("is_site_admin"):
return redirect(url_for("site_admin.dashboard"))
if session.get("role") != "admin":
flash("Du hast keine Gruppen-Admin-Berechtigung.", "danger")
flash("You do not have group admin permission.", "danger")
return redirect(url_for("panel.dashboard"))
return f(*args, **kwargs)
return decorated
@@ -74,7 +74,7 @@ def member_add():
role = request.form.get("role", "member")
if user_id:
db.add_group_member(user_id, group_id, role)
flash("Mitglied hinzugefügt.", "success")
flash("Member added.", "success")
return redirect(url_for("group_admin.members"))
@@ -86,7 +86,7 @@ def member_edit(user_id):
member = db.get_group_member(user_id, group_id)
user = db.get_user_by_id(user_id)
if not member or not user:
flash("Mitglied nicht gefunden.", "danger")
flash("Member not found.", "danger")
return redirect(url_for("group_admin.members"))
raw_perms = member.get("permissions")
@@ -96,7 +96,7 @@ def member_edit(user_id):
role = request.form.get("role", "member")
new_perms = {key: (request.form.get(key) == "1") for key, _ in ALL_PERMISSIONS}
db.update_member(user_id, group_id, role, new_perms)
flash("Berechtigungen aktualisiert.", "success")
flash("Permissions updated.", "success")
return redirect(url_for("group_admin.members"))
return render_template("group_admin/member_edit.html",
@@ -108,10 +108,10 @@ def member_edit(user_id):
@group_admin_required
def member_remove(user_id):
if user_id == session["user_id"]:
flash("Du kannst dich nicht selbst entfernen.", "danger")
flash("You cannot remove yourself.", "danger")
else:
db.remove_group_member(user_id, session["group_id"])
flash("Mitglied entfernt.", "success")
flash("Member removed.", "success")
return redirect(url_for("group_admin.members"))
@@ -135,7 +135,7 @@ def database():
database_name = request.form.get("database", "").strip()
if not all([host, port, user, database_name]):
error = "Host, Port, Benutzer und Datenbankname sind Pflichtfelder."
error = "Host, Port, User and Database name are required."
else:
try:
# Verbindung testen
@@ -147,7 +147,7 @@ def database():
)
test.close()
db.set_group_db_creds(group_id, host, int(port), user, password, database_name)
flash("Datenbankverbindung gespeichert und getestet", "success")
flash("Database connection saved and tested", "success")
return redirect(url_for("group_admin.database"))
except Exception as e:
error = f"Verbindungstest fehlgeschlagen: {e}"
@@ -160,5 +160,5 @@ def database():
@group_admin_required
def database_delete():
db.delete_group_db_creds(session["group_id"])
flash("Datenbankverbindung entfernt.", "success")
flash("Database connection removed.", "success")
return redirect(url_for("group_admin.database"))

View File

@@ -38,7 +38,7 @@ def perm_required(perm):
return f(*args, **kwargs)
perms = session.get("permissions", {})
if not perms.get(perm, False):
flash("Du hast keine Berechtigung, diese Seite zu sehen.", "danger")
flash("You do not have permission to view this page.", "danger")
return redirect(url_for("panel.dashboard"))
return f(*args, **kwargs)
return wrapped
@@ -139,7 +139,7 @@ def dashboard():
ORDER BY timestamp DESC LIMIT 20
""")
except Exception as e:
flash(f"Datenbankfehler: {e}", "danger")
flash(f"Database error: {e}", "danger")
return render_template("panel/no_db.html")
return render_template("panel/dashboard.html",
@@ -176,7 +176,7 @@ def players():
def player_detail(uuid):
player = query("SELECT * FROM players WHERE uuid = %s", (uuid,), fetchone=True)
if not player:
flash("Spieler nicht gefunden.", "danger")
flash("Player not found.", "danger")
return redirect(url_for("panel.players"))
perms = session.get("permissions", {})
is_admin = session.get("is_site_admin") or session.get("role") == "admin"

View File

@@ -64,12 +64,12 @@ def group_new():
name = request.form.get("name", "").strip()
desc = request.form.get("description", "").strip()
if not name:
flash("Gruppenname darf nicht leer sein.", "danger")
flash("Group name must not be empty.", "danger")
elif db.get_group_by_name(name):
flash("Eine Gruppe mit diesem Namen existiert bereits.", "danger")
flash("A group with that name already exists.", "danger")
else:
db.create_group(name, desc)
flash(f"Gruppe '{name}' erstellt.", "success")
flash(f"Group '{name}' created.", "success")
return redirect(url_for("site_admin.groups"))
return render_template("admin/group_edit.html", group=None)
@@ -79,16 +79,16 @@ def group_new():
def group_edit(group_id):
group = db.get_group_by_id(group_id)
if not group:
flash("Gruppe nicht gefunden.", "danger")
flash("Group not found.", "danger")
return redirect(url_for("site_admin.groups"))
if request.method == "POST":
name = request.form.get("name", "").strip()
desc = request.form.get("description", "").strip()
if not name:
flash("Gruppenname darf nicht leer sein.", "danger")
flash("Group name must not be empty.", "danger")
else:
db.update_group(group_id, name, desc)
flash("Gruppe aktualisiert.", "success")
flash("Group updated.", "success")
return redirect(url_for("site_admin.groups"))
return render_template("admin/group_edit.html", group=group)
@@ -97,7 +97,7 @@ def group_edit(group_id):
@admin_required
def group_delete(group_id):
db.delete_group(group_id)
flash("Gruppe gelöscht.", "success")
flash("Group deleted.", "success")
return redirect(url_for("site_admin.groups"))
@@ -120,7 +120,7 @@ def group_member_add(group_id):
role = request.form.get("role", "member")
if user_id:
db.add_group_member(user_id, group_id, role)
flash("Mitglied hinzugefügt.", "success")
flash("Member added.", "success")
return redirect(url_for("site_admin.group_members", group_id=group_id))
@@ -128,7 +128,7 @@ def group_member_add(group_id):
@admin_required
def group_member_remove(group_id, user_id):
db.remove_group_member(user_id, group_id)
flash("Mitglied entfernt.", "success")
flash("Member removed.", "success")
return redirect(url_for("site_admin.group_members", group_id=group_id))
@@ -141,7 +141,7 @@ def group_member_toggle_role(group_id, user_id):
new_role = "member" if member["role"] == "admin" else "admin"
perms = member["permissions"] if isinstance(member["permissions"], dict) else (_json.loads(member["permissions"]) if member["permissions"] else {})
db.update_member(user_id, group_id, new_role, perms)
flash(f"Rolle auf '{new_role}' geändert.", "success")
flash(f"Role changed to '{new_role}'.", "success")
return redirect(url_for("site_admin.group_members", group_id=group_id))
@@ -164,12 +164,12 @@ def user_new():
password = request.form.get("password", "")
is_site_admin = request.form.get("is_site_admin") == "1"
if not username or not email or not password:
flash("Alle Felder sind Pflichtfelder.", "danger")
flash("All fields are required.", "danger")
elif db.get_user_by_username(username):
flash("Benutzername bereits vergeben.", "danger")
flash("Username already taken.", "danger")
else:
db.create_user(username, email, password, is_site_admin)
flash(f"Nutzer '{username}' erstellt.", "success")
flash(f"User '{username}' created.", "success")
return redirect(url_for("site_admin.users"))
return render_template("admin/user_edit.html", user=None)
@@ -179,7 +179,7 @@ def user_new():
def user_edit(user_id):
user = db.get_user_by_id(user_id)
if not user:
flash("Nutzer nicht gefunden.", "danger")
flash("User not found.", "danger")
return redirect(url_for("site_admin.users"))
if request.method == "POST":
username = request.form.get("username", "").strip()
@@ -189,8 +189,8 @@ def user_edit(user_id):
db.update_user(user_id, username, email, is_site_admin)
if new_password:
db.change_password(user_id, new_password)
flash("Passwort geändert.", "info")
flash("Nutzer aktualisiert.", "success")
flash("Password changed.", "info")
flash("User updated.", "success")
return redirect(url_for("site_admin.users"))
return render_template("admin/user_edit.html", user=user)
@@ -199,10 +199,10 @@ def user_edit(user_id):
@admin_required
def user_delete(user_id):
if user_id == session.get("user_id"):
flash("Du kannst dich nicht selbst löschen.", "danger")
flash("You cannot delete yourself.", "danger")
else:
db.delete_user(user_id)
flash("Nutzer gelöscht.", "success")
flash("User deleted.", "success")
return redirect(url_for("site_admin.users"))
@@ -213,13 +213,13 @@ def user_delete(user_id):
@site_admin.route("/view-group/<int:group_id>")
@admin_required
def view_group(group_id):
"""Site-Admin wechselt temporär in eine Grup­pe, um deren MC-Daten zu sehen."""
"""Site Admin temporarily switches into a group to view its MC data."""
group = db.get_group_by_id(group_id)
if not group:
flash("Gruppe nicht gefunden.", "danger")
flash("Group not found.", "danger")
return redirect(url_for("site_admin.dashboard"))
if not db.has_db_configured(group_id):
flash("Für diese Gruppe ist noch keine Datenbank konfiguriert.", "warning")
flash("No database configured for this group.", "warning")
return redirect(url_for("site_admin.dashboard"))
# Alle Berechtigungen als Admin
all_perms = {k: True for k in ["view_dashboard","view_players","view_sessions",