Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b69d0745dd |
+1
-1
@@ -1 +1 @@
|
|||||||
1.2.5
|
1.2.6
|
||||||
|
|||||||
+47
-10
@@ -326,6 +326,10 @@ PERMISSIONS = {
|
|||||||
"label": "Systemeinstellungen",
|
"label": "Systemeinstellungen",
|
||||||
"rows": {"view": "settings_system.view", "edit": "settings_system.edit"},
|
"rows": {"view": "settings_system.view", "edit": "settings_system.edit"},
|
||||||
},
|
},
|
||||||
|
"settings_license": {
|
||||||
|
"label": "Lizenz",
|
||||||
|
"rows": {"view": "settings_license.view", "edit": "settings_license.edit"},
|
||||||
|
},
|
||||||
"settings_importexport": {
|
"settings_importexport": {
|
||||||
"label": "Im-/Export",
|
"label": "Im-/Export",
|
||||||
"rows": {
|
"rows": {
|
||||||
@@ -392,6 +396,8 @@ PERMISSION_LABELS = {
|
|||||||
"groups.view": "Gruppen lesen", "groups.create": "Gruppen anlegen",
|
"groups.view": "Gruppen lesen", "groups.create": "Gruppen anlegen",
|
||||||
"groups.edit": "Gruppen ändern (inkl. Löschen)",
|
"groups.edit": "Gruppen ändern (inkl. Löschen)",
|
||||||
"settings_system.view": "Systemeinstellungen lesen", "settings_system.edit": "Systemeinstellungen ändern",
|
"settings_system.view": "Systemeinstellungen lesen", "settings_system.edit": "Systemeinstellungen ändern",
|
||||||
|
"settings_license.view": "Lizenzstatus ansehen",
|
||||||
|
"settings_license.edit": "Lizenzdatei hochladen sowie Lizenz aktivieren/deaktivieren (online oder per Code)",
|
||||||
"settings_importexport.view": "Im-/Export-Seite ansehen",
|
"settings_importexport.view": "Im-/Export-Seite ansehen",
|
||||||
"settings_importexport.edit": "Daten importieren",
|
"settings_importexport.edit": "Daten importieren",
|
||||||
"settings_importexport.export": "Daten exportieren (Export-Datei enthält Passwörter im Klartext)",
|
"settings_importexport.export": "Daten exportieren (Export-Datei enthält Passwörter im Klartext)",
|
||||||
@@ -486,10 +492,11 @@ def _nav_key_visible(key, user):
|
|||||||
if key == "settings_system":
|
if key == "settings_system":
|
||||||
return user.can_view_settings_system
|
return user.can_view_settings_system
|
||||||
if key == "settings_license":
|
if key == "settings_license":
|
||||||
# Immer erreichbar für jeden mit Systemeinstellungen-Leserecht --
|
# Eigenes Recht (settings_license.view), unabhängig von
|
||||||
# muss auch OHNE Lizenz sichtbar bleiben, sonst könnte niemand
|
# settings_system -- muss auch OHNE eine aktive Lizenz sichtbar
|
||||||
# jemals eine erste Lizenz hochladen/aktivieren.
|
# bleiben (das ist eine andere Prüfung, siehe license_active()),
|
||||||
return user.can_view_settings_system
|
# sonst könnte niemand jemals eine erste Lizenz hochladen/aktivieren.
|
||||||
|
return user.can_view_settings_license
|
||||||
if key == "settings_importexport":
|
if key == "settings_importexport":
|
||||||
return user.can_view_settings_importexport
|
return user.can_view_settings_importexport
|
||||||
if key == "settings_dhcp":
|
if key == "settings_dhcp":
|
||||||
@@ -726,6 +733,10 @@ class User(UserMixin):
|
|||||||
def can_view_settings_system(self):
|
def can_view_settings_system(self):
|
||||||
return self.has_permission("settings_system.view")
|
return self.has_permission("settings_system.view")
|
||||||
|
|
||||||
|
@property
|
||||||
|
def can_view_settings_license(self):
|
||||||
|
return self.has_permission("settings_license.view")
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def can_view_settings_importexport(self):
|
def can_view_settings_importexport(self):
|
||||||
return self.has_any_permission([
|
return self.has_any_permission([
|
||||||
@@ -1146,6 +1157,32 @@ def _ensure_schema():
|
|||||||
"INSERT OR IGNORE INTO settings (key, value) VALUES (?, '1')", (_migration_key_v2,)
|
"INSERT OR IGNORE INTO settings (key, value) VALUES (?, '1')", (_migration_key_v2,)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
_migration_key_license_perm = "_migrated_settings_license_permission_v1"
|
||||||
|
if not conn.execute("SELECT 1 FROM settings WHERE key=?", (_migration_key_license_perm,)).fetchone():
|
||||||
|
# "Lizenz" (settings_license) hatte bislang KEIN eigenes Recht --
|
||||||
|
# die Seite lief komplett über settings_system.view/.edit mit.
|
||||||
|
# Backfill: jede Gruppe, die settings_system.view/.edit bereits
|
||||||
|
# hatte, bekommt automatisch das neue, gespiegelte
|
||||||
|
# settings_license.view/.edit dazu -- ohne diesen Schritt würden
|
||||||
|
# bestehende Gruppen beim Update stillschweigend den Zugriff auf
|
||||||
|
# die Lizenzseite verlieren, den sie vorher implizit hatten.
|
||||||
|
_system_to_license = {
|
||||||
|
"settings_system.view": "settings_license.view",
|
||||||
|
"settings_system.edit": "settings_license.edit",
|
||||||
|
}
|
||||||
|
for system_perm, license_perm in _system_to_license.items():
|
||||||
|
rows = conn.execute(
|
||||||
|
"SELECT DISTINCT group_id FROM group_permissions WHERE permission=?", (system_perm,)
|
||||||
|
).fetchall()
|
||||||
|
for row in rows:
|
||||||
|
conn.execute(
|
||||||
|
"INSERT OR IGNORE INTO group_permissions (group_id, permission) VALUES (?, ?)",
|
||||||
|
(row["group_id"], license_perm),
|
||||||
|
)
|
||||||
|
conn.execute(
|
||||||
|
"INSERT OR IGNORE INTO settings (key, value) VALUES (?, '1')", (_migration_key_license_perm,)
|
||||||
|
)
|
||||||
|
|
||||||
_migration_key_old_logs = "_cleaned_up_legacy_rpi_log_files_v1"
|
_migration_key_old_logs = "_cleaned_up_legacy_rpi_log_files_v1"
|
||||||
if not conn.execute("SELECT 1 FROM settings WHERE key=?", (_migration_key_old_logs,)).fetchone():
|
if not conn.execute("SELECT 1 FROM settings WHERE key=?", (_migration_key_old_logs,)).fetchone():
|
||||||
for stale_log in glob.glob("/var/log/rpi-*.log"):
|
for stale_log in glob.glob("/var/log/rpi-*.log"):
|
||||||
@@ -4469,7 +4506,7 @@ def settings():
|
|||||||
@app.route("/settings/license")
|
@app.route("/settings/license")
|
||||||
@login_required
|
@login_required
|
||||||
def settings_license():
|
def settings_license():
|
||||||
if not current_user.can_view_settings_system:
|
if not current_user.can_view_settings_license:
|
||||||
flash("Keine Berechtigung, die Lizenz anzusehen.", "danger")
|
flash("Keine Berechtigung, die Lizenz anzusehen.", "danger")
|
||||||
return redirect(url_for("index"))
|
return redirect(url_for("index"))
|
||||||
pending_raw = get_setting("license_pending_request", "")
|
pending_raw = get_setting("license_pending_request", "")
|
||||||
@@ -4492,7 +4529,7 @@ def settings_license():
|
|||||||
@app.route("/settings/license/upload", methods=["POST"])
|
@app.route("/settings/license/upload", methods=["POST"])
|
||||||
@login_required
|
@login_required
|
||||||
def license_upload():
|
def license_upload():
|
||||||
if not current_user.has_permission("settings_system.edit"):
|
if not current_user.has_permission("settings_license.edit"):
|
||||||
flash("Keine Berechtigung, die Lizenz zu ändern.", "danger")
|
flash("Keine Berechtigung, die Lizenz zu ändern.", "danger")
|
||||||
return redirect(url_for("settings_license"))
|
return redirect(url_for("settings_license"))
|
||||||
uploaded = request.files.get("license_file")
|
uploaded = request.files.get("license_file")
|
||||||
@@ -4585,7 +4622,7 @@ def _license_handshake_confirm(action, success_setting_fn, success_log_action, s
|
|||||||
@app.route("/settings/license/activate", methods=["POST"])
|
@app.route("/settings/license/activate", methods=["POST"])
|
||||||
@login_required
|
@login_required
|
||||||
def license_activate():
|
def license_activate():
|
||||||
if not current_user.has_permission("settings_system.edit"):
|
if not current_user.has_permission("settings_license.edit"):
|
||||||
flash("Keine Berechtigung, die Lizenz zu aktivieren.", "danger")
|
flash("Keine Berechtigung, die Lizenz zu aktivieren.", "danger")
|
||||||
return redirect(url_for("settings_license"))
|
return redirect(url_for("settings_license"))
|
||||||
if not _license_state.get("file") or not _license_state.get("valid"):
|
if not _license_state.get("file") or not _license_state.get("valid"):
|
||||||
@@ -4614,7 +4651,7 @@ def license_activate():
|
|||||||
@app.route("/settings/license/activate/confirm", methods=["POST"])
|
@app.route("/settings/license/activate/confirm", methods=["POST"])
|
||||||
@login_required
|
@login_required
|
||||||
def license_activate_confirm():
|
def license_activate_confirm():
|
||||||
if not current_user.has_permission("settings_system.edit"):
|
if not current_user.has_permission("settings_license.edit"):
|
||||||
flash("Keine Berechtigung, die Lizenz zu aktivieren.", "danger")
|
flash("Keine Berechtigung, die Lizenz zu aktivieren.", "danger")
|
||||||
return redirect(url_for("settings_license"))
|
return redirect(url_for("settings_license"))
|
||||||
|
|
||||||
@@ -4640,7 +4677,7 @@ def license_activate_confirm():
|
|||||||
@app.route("/settings/license/deactivate", methods=["POST"])
|
@app.route("/settings/license/deactivate", methods=["POST"])
|
||||||
@login_required
|
@login_required
|
||||||
def license_deactivate():
|
def license_deactivate():
|
||||||
if not current_user.has_permission("settings_system.edit"):
|
if not current_user.has_permission("settings_license.edit"):
|
||||||
flash("Keine Berechtigung, die Lizenz zu deaktivieren.", "danger")
|
flash("Keine Berechtigung, die Lizenz zu deaktivieren.", "danger")
|
||||||
return redirect(url_for("settings_license"))
|
return redirect(url_for("settings_license"))
|
||||||
if not _license_state.get("file") or not license_activated():
|
if not _license_state.get("file") or not license_activated():
|
||||||
@@ -4660,7 +4697,7 @@ def license_deactivate():
|
|||||||
@app.route("/settings/license/deactivate/confirm", methods=["POST"])
|
@app.route("/settings/license/deactivate/confirm", methods=["POST"])
|
||||||
@login_required
|
@login_required
|
||||||
def license_deactivate_confirm():
|
def license_deactivate_confirm():
|
||||||
if not current_user.has_permission("settings_system.edit"):
|
if not current_user.has_permission("settings_license.edit"):
|
||||||
flash("Keine Berechtigung, die Lizenz zu deaktivieren.", "danger")
|
flash("Keine Berechtigung, die Lizenz zu deaktivieren.", "danger")
|
||||||
return redirect(url_for("settings_license"))
|
return redirect(url_for("settings_license"))
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
{% set active_page = "settings_license" %}
|
{% set active_page = "settings_license" %}
|
||||||
{% set can_edit = current_user.has_permission('settings_system.edit') %}
|
{% set can_edit = current_user.has_permission('settings_license.edit') %}
|
||||||
{% block page_title %}Lizenz{% endblock %}
|
{% block page_title %}Lizenz{% endblock %}
|
||||||
{% block page_sub %}<div class="topbar-sub">Lizenzstatus, Module und Aktivierung dieses Systems</div>{% endblock %}
|
{% block page_sub %}<div class="topbar-sub">Lizenzstatus, Module und Aktivierung dieses Systems</div>{% endblock %}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user