Hostname-Einstellung, DHCP-Range-Pflicht, Topbar-Ampel, Text-Straffung, Quelltext-Huerde
Hostname (Systemeinstellungen, neben Pruefintervall): - hostnamectl set-hostname ueber die App, Validierung (RFC-1123-artiges Label), kein Revert-Timer noetig (kappt die Erreichbarkeit nicht wie eine IP-Aenderung). Live getestet inkl. Validierung und Revert. DHCP: Range ist jetzt Pflicht, kein geratener Default mehr: - dhcp_range_start/end/dns starten leer (Platzhaltertext statt fake- echt aussehendem Default) - ein Zufalls-Range haette den Dienst sonst unbemerkt mit einer zum echten Netz nicht passenden Konfiguration starten lassen koennen. - write_dhcp_file und dhcp_service_action=enable_restart verweigern sich ohne eingetragene Range; _render_kea_config laesst "pools" ohne Range komplett weg statt einen kaputten Pool-String zu erzeugen. - Neues, separates dhcp_gateway-Feld (optional) fuer einen vom automatisch erkannten Gateway abweichenden Router fuer die Clients. Topbar-Ampel fuer den Kea-Dienst: - Gruener/roter Punkt neben dem Pruefintervall-Timer, nur sichtbar mit settings_dhcp.view (ein einzelner, kurzer systemctl-Aufruf pro Request, nicht die volle Status-Erkennung). Live verifiziert (rot wenn gestoppt, gruen wenn gestartet). Reservierungstabelle zeigt jetzt pro Client, welche eigene DHCP-Option greift (global oder Client-Override, mit Wert im Tooltip). Text-Straffung: die laengsten Hint-Texte und Code-Kommentare in Templates/app.py gekuerzt (u.a. groups.html, settings_dhcp.html, account.html, devices/switches/users/credentials.html, zwei grosse Migrations-/DHCP-Kommentarbloecke in app.py) - Kernaussagen erhalten, Redundanz entfernt. Quelltext-Huerde (KEINE echte Sicherheit, nur Abschreckung): Rechtsklick und DevTools-/Quelltext-Shortcuts per JS blockiert. Klar dokumentiert in Kommentar + README, dass der Browser HTML/CSS/JS immer vollstaendig ausliefert und das in Sekunden umgehbar ist - echte Absicherung bleiben ausschliesslich die serverseitigen Rechteprüfungen. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -366,6 +366,27 @@
|
||||
});
|
||||
}
|
||||
|
||||
/* ---------------- Quelltext-Hürde ----------------
|
||||
Blockiert Rechtsklick-Menü und die üblichen DevTools-/Quelltext-
|
||||
Shortcuts. WICHTIG: das ist eine Hürde für gelegentliches Kopieren,
|
||||
KEIN echter Schutz — jeder Browser liefert HTML/CSS/JS immer
|
||||
vollständig aus, sonst könnte er die Seite nicht darstellen. Wer
|
||||
wirklich an den Quelltext will, umgeht das in Sekunden (URL-Leiste,
|
||||
externer HTTP-Client, DevTools per Menü statt Shortcut). Echte
|
||||
Sicherheit kommt ausschließlich von den serverseitigen Rechteprüfungen
|
||||
in app.py, nicht davon, das Nachsehen im Browser zu erschweren. */
|
||||
function initSourceProtection() {
|
||||
document.addEventListener("contextmenu", (e) => e.preventDefault());
|
||||
document.addEventListener("keydown", (e) => {
|
||||
const key = e.key.toUpperCase();
|
||||
const blocked =
|
||||
key === "F12" ||
|
||||
(e.ctrlKey && e.shiftKey && ["I", "J", "C"].includes(key)) ||
|
||||
(e.ctrlKey && key === "U");
|
||||
if (blocked) e.preventDefault();
|
||||
});
|
||||
}
|
||||
|
||||
/* ---------------- Init ---------------- */
|
||||
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
@@ -378,6 +399,7 @@
|
||||
initCheckTimer();
|
||||
initRunCheckNow();
|
||||
initSortableTables();
|
||||
initSourceProtection();
|
||||
document.querySelectorAll("[data-theme-toggle]").forEach((btn) => btn.addEventListener("click", toggleTheme));
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user