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:
@@ -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"))
|
||||
|
||||
@@ -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"))
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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 Gruppe, 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",
|
||||
|
||||
Reference in New Issue
Block a user