From c39289c584051d2468aa644d5c370b9f8f0fe6d0 Mon Sep 17 00:00:00 2001 From: Tim Eertmoed Date: Sun, 28 Sep 2025 17:07:59 +0000 Subject: [PATCH] Improvement --- srv/poe_manager/app.py | 82 +++++++++++------ srv/poe_manager/sqlite.db | Bin 40960 -> 40960 bytes srv/poe_manager/static/css/style.css | 56 ++++++++++++ srv/poe_manager/templates/base.html | 68 ++++++++++---- srv/poe_manager/templates/devices.html | 2 - srv/poe_manager/templates/logs.html | 19 +++- srv/poe_manager/templates/users.html | 118 +++++++++++++++++++++---- 7 files changed, 280 insertions(+), 65 deletions(-) diff --git a/srv/poe_manager/app.py b/srv/poe_manager/app.py index 87713ad..d694755 100644 --- a/srv/poe_manager/app.py +++ b/srv/poe_manager/app.py @@ -1,8 +1,7 @@ -#!/usr/bin/env python3 +#u!/usr/bin/env python3 from flask import Flask, render_template, request, redirect, url_for, flash from flask_login import LoginManager, login_user, login_required, logout_user, UserMixin, current_user from flask_bcrypt import Bcrypt -from werkzeug.security import generate_password_hash from cryptography.fernet import Fernet import sqlite3 import glob, os, re @@ -343,43 +342,74 @@ def users(): return redirect(url_for("index")) conn = sqlite3.connect("sqlite.db") - conn.row_factory = sqlite3.Row # wichtig für Template + conn.row_factory = sqlite3.Row c = conn.cursor() - # Neues Benutzer hinzufügen if request.method == "POST": - if "add_user" in request.form: - username = request.form["username"] - password = generate_password_hash(request.form["password"]) - is_admin = 1 if "is_admin" in request.form else 0 - try: - c.execute("INSERT INTO users (username, password, is_admin) VALUES (?, ?, ?)", - (username, password, is_admin)) - conn.commit() - flash(f"Benutzer {username} hinzugefügt!") - except sqlite3.IntegrityError: - flash("Benutzername existiert bereits!") - if "delete_user" in request.form: + # Neuen Benutzer hinzufügen + if "add_user" in request.form: + username = request.form["username"].strip() + password = request.form["password"].strip() + is_admin = int(request.form.get("is_admin", 0)) + + if username and password: + pw_hash = bcrypt.generate_password_hash(password).decode("utf-8") + try: + c.execute( + "INSERT INTO users (username, password, is_admin) VALUES (?, ?, ?)", + (username, pw_hash, is_admin) + ) + conn.commit() + flash(f"Benutzer '{username}' erfolgreich angelegt!") + except sqlite3.IntegrityError: + flash("Benutzername existiert bereits!") + else: + flash("Username und Passwort dürfen nicht leer sein!") + + # Rolle ändern + elif "change_role" in request.form: + user_id = request.form["user_id"] + username = request.form.get("username", "").strip() + is_admin = int(request.form.get("is_admin", 0)) + if username: + c.execute( + "UPDATE users SET username=?, is_admin=? WHERE id=?", + (username, is_admin, user_id) + ) + conn.commit() + flash("Rolle und Username geändert!") + else: + flash("Username darf nicht leer sein!") + + # Passwort ändern + elif "change_password" in request.form: + user_id = request.form["user_id"] + new_password = request.form.get("new_password", "").strip() + if new_password: + pw_hash = bcrypt.generate_password_hash(new_password).decode("utf-8") + c.execute( + "UPDATE users SET password=? WHERE id=?", + (pw_hash, user_id) + ) + conn.commit() + flash("Passwort erfolgreich geändert!") + else: + flash("Passwort darf nicht leer sein!") + + # Benutzer löschen + elif "delete_user" in request.form: user_id = request.form["delete_user"] c.execute("DELETE FROM users WHERE id=?", (user_id,)) conn.commit() flash("Benutzer gelöscht!") - if "edit_user" in request.form: - user_id = request.form["user_id"] - username = request.form["username"] - is_admin = 1 if "is_admin" in request.form else 0 - c.execute("UPDATE users SET username=?, is_admin=? WHERE id=?", - (username, is_admin, user_id)) - conn.commit() - flash("Benutzer geändert!") - - # Alle Benutzer laden + # Alle Benutzer laden (GET oder nach POST) c.execute("SELECT id, username, is_admin FROM users") users_list = c.fetchall() conn.close() + # Direkt rendern, Flash-Messages werden angezeigt return render_template("users.html", users=users_list) if __name__ == "__main__": diff --git a/srv/poe_manager/sqlite.db b/srv/poe_manager/sqlite.db index f2760cfdeab98385e5162608c536d17c95328d18..39a3341712ea868ef9b03e216448350840277fe5 100644 GIT binary patch delta 253 zcmZoTz|?SnX@WGP+C&*=MzxIzOZ+*Q_zM~Mck&l*7F0;(_i$roV-Rg*ST` zQZY1ANz~6xGw_aZD>P1Y4Dbpq%BVC+(@PBsEp~OuF%1aJ$u%=G@hQsEFLKRt2@5Lr zcMEaO*PFaE-WzE22L}ER{69AfCOqMn;$RkK1R2ZB#w^TPo>|Pxz`(%B|CNFND^UIg zzZ8(m$;d3uSX!J~RLl&LW#YfX!2gQ>4p9CAKOYYhvn+pRUP)?ESz?aqYo;5_144;3`i5 diff --git a/srv/poe_manager/static/css/style.css b/srv/poe_manager/static/css/style.css index a5c2005..3ef38c5 100644 --- a/srv/poe_manager/static/css/style.css +++ b/srv/poe_manager/static/css/style.css @@ -1,5 +1,10 @@ body { padding: 20px; + background: #3c4346; +} + +h1, h2, h3, h4, h5, h6 { + color: #fff; } .table-dark { @@ -46,3 +51,54 @@ pre { color: red; font-weight: bold; } + +.content-wrapper { + max-width: 1024px; + margin-left: auto; + margin-right: auto; +} + +.navbar { + display: flex; + justify-content: flex-end; +} + +.navbar-container { + display: flex; + justify-content: space-between; /* Logo links, Navbar rechts */ + align-items: center; + margin-bottom: 1rem; +} + +.navbar-buttons .btn { + margin-right: 0.25rem; /* kleine Lücke zwischen Buttons */ +} + +.navbar-logo img { + display: flex; + justify-content: flex-start; + height: 60px; /* Logo Höhe, kann angepasst werden */ +} + +#log-container { + position: relative; + height: calc(100vh - 150px); /* Füllt die Seite minus Header */ +} + +#log-box { + height: 97%; + overflow: auto; + white-space: pre-wrap; + font-family: monospace; + border: 1px solid #dee2e6; /* Bootstrap-like border */ + padding: 1rem; + background-color: #f8f9fa; +} + +#refresh-timer { + position: absolute; + bottom: 10px; + right: 10px; + font-size: 0.9em; + color: gray; +} diff --git a/srv/poe_manager/templates/base.html b/srv/poe_manager/templates/base.html index 4276d29..586749e 100644 --- a/srv/poe_manager/templates/base.html +++ b/srv/poe_manager/templates/base.html @@ -7,26 +7,60 @@ - - +
+ + + + + + {% with messages = get_flashed_messages() %} + {% if messages %} +
+ {% for message in messages %} + + {% endfor %} +
+ {% endif %} + {% endwith %} + + +
+ {% block content %}{% endblock %} +
- -
- {% block content %}{% endblock %}
+ diff --git a/srv/poe_manager/templates/devices.html b/srv/poe_manager/templates/devices.html index ce5038e..71f7539 100644 --- a/srv/poe_manager/templates/devices.html +++ b/srv/poe_manager/templates/devices.html @@ -11,8 +11,6 @@ {% endif %} {% endwith %} -

Prüfintervall: {{ interval }} Minuten

- {% if current_user.is_admin %}

Neues Gerät hinzufügen

diff --git a/srv/poe_manager/templates/logs.html b/srv/poe_manager/templates/logs.html index 7e5cd2b..fcaf6d5 100644 --- a/srv/poe_manager/templates/logs.html +++ b/srv/poe_manager/templates/logs.html @@ -3,11 +3,18 @@

Live Log

-
+
+
+
+ Nächstes Update in Sekunden +
+
diff --git a/srv/poe_manager/templates/users.html b/srv/poe_manager/templates/users.html index c2cbcc7..339e0e2 100644 --- a/srv/poe_manager/templates/users.html +++ b/srv/poe_manager/templates/users.html @@ -5,14 +5,14 @@ {% if current_user.is_admin %} - + {% endif %} - + {% if current_user.is_admin %}{% endif %} @@ -23,8 +23,21 @@ {% if current_user.is_admin %}
UsernameFunktionRolleAktionen
{% if u['is_admin'] %}Admin{% else %}User{% endif %} - + + + + + + + @@ -36,36 +49,95 @@
- +
+ + + + + +