aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/sys.html111
-rw-r--r--src/sys.js115
-rw-r--r--src/wan.js1
3 files changed, 226 insertions, 1 deletions
diff --git a/src/sys.html b/src/sys.html
new file mode 100644
index 0000000..c79d9e8
--- /dev/null
+++ b/src/sys.html
@@ -0,0 +1,111 @@
+<!doctype html>
+<html lang="de">
+ <head>
+ <meta charset="UTF-8" />
+ <link rel="stylesheet" href="styles.css" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>System - RSDSL Verwaltungswerkzeug</title>
+ <script type="module" src="/dashboard.js" defer></script>
+ <script type="module" src="/sys.js" defer></script>
+ </head>
+
+ <body>
+ <div class="container">
+ <h1>System</h1>
+
+ <div class="row">
+ <form id="dashboard-form">
+ <button id="dashboard-submit" type="submit">↩ Zurück zur Übersicht</button>
+ </form>
+
+ <form id="wan-open-form">
+ <button id="wan-open-submit" type="submit">Einwahl und Zugansdaten</button>
+ </form>
+
+ <form id="lan-open-form">
+ <button id="lan-open-submit" type="submit">LAN</button>
+ </form>
+
+ <form id="ddns-open-form">
+ <button id="ddns-open-submit" type="submit">Dynamisches DNS (INWX)</button>
+ </form>
+
+ <form id="log-open-form">
+ <button id="log-open-submit" type="submit">Diagnoseprotokolle</button>
+ </form>
+
+ <form id="sys-open-form">
+ <button id="sys-open-submit" type="submit">System</button>
+ </form>
+
+ <form id="disconnect-form">
+ <button id="disconnect-submit" type="submit">🚪 Abmelden</button>
+ </form>
+ </div>
+
+ <br />
+
+ <form id="power-form">
+ <fieldset>
+ <legend>Neustart und Herunterfahren</legend>
+
+ <div class="row">
+ <button id="power-reboot">🔄 Neustart</button>
+ <button id="power-shutdown">🔌 Herunterfahren</button>
+ </div>
+
+ <p>Information: Ein Neustart dauert ca. 30 Sekunden bis 1 Minute.
+ In der Regel wird die Internetverbindung innerhalb von 1 Minute
+ wieder aufgebaut, sofern keine anderen Geräte neu gestartet wurden.
+ Bei anschließenden Verbindungsproblemen kann es ratsam sein, die
+ betroffenen Geräte neu mit dem Netzwerk zu verbinden oder für
+ mehrere Stunden verbunden zu lassen. Achtung: Insbesondere
+ Smartphones trennen die WLAN-Verbindung oft erst nach mindestens 5
+ Sekunden Abschaltzeit. Daher die WLAN-Funktion für mindestens 5
+ Sekunden deaktivieren und erst dann wieder einschalten.</p>
+
+ <p>Nach erfolgreichem Herunterfahren muss das Stromkabel abgezogen
+ werden, um die Hardware tatsächlich auszuschalten. Erst beim
+ Wiederanschließen fährt das System wieder hoch.</p>
+ </fieldset>
+ </form>
+
+ <br />
+
+ <form id="password-form">
+ <fieldset>
+ <legend>Verwaltungspasswort</legend>
+
+ <label for="password-old" form="password-form">Altes Passwort:</label>
+ <div class="row">
+ <input id="password-old" type="password" />
+ </div>
+
+ <label for="password-new" form="password-form">Neues Passwort:</label>
+ <div class="row">
+ <input id="password-new" type="password" />
+ </div>
+
+ <label for="password-repeat" form="password-form">Neues Passwort wiederholen:</label>
+ <div class="row">
+ <input id="password-repeat" type="password" />
+ </div>
+
+ <br />
+
+ <div class="row">
+ <button id="password-show">🔒 Neues Passwort ein-/ausblenden</button>
+ </div>
+
+ <br />
+
+ <div class="row">
+ <button id="password-submit" type="submit">Passwort ändern</button>
+ </div>
+
+ <p id="password-status"></p>
+ </fieldset>
+ </form>
+ </div>
+ </body>
+</html>
diff --git a/src/sys.js b/src/sys.js
new file mode 100644
index 0000000..8b19f22
--- /dev/null
+++ b/src/sys.js
@@ -0,0 +1,115 @@
+const { invoke } = window.__TAURI__.tauri;
+const { message } = window.__TAURI__.dialog;
+
+let passwordOldEl;
+let passwordNewEl;
+let passwordRepeatEl;
+let passwordSubmitEl;
+let passwordStatusEl;
+
+async function reboot() {
+ const error = await invoke("reboot", {});
+
+ if (error !== "") {
+ await message("Befehl konnte nicht erteilt werden: " + error, {
+ kind: "error",
+ title: "Neustart nicht erfolgt"
+ });
+ }
+
+ const successTime = Date.now();
+
+ while ((Date.now() - successTime) < 60) {
+ await message("Neustart läuft. Bitte ca. 1 Minute warten.", {
+ kind: "info",
+ title: "Neustart im Gange"
+ });
+ }
+}
+
+async function shutdown() {
+ const error = await invoke("shutdown", {});
+
+ if (error !== "") {
+ await message("Befehl konnte nicht erteilt werden: " + error, {
+ kind: "error",
+ title: "Herunterfahren nicht erfolgt"
+ });
+ }
+
+ await message("Router erfolgreich heruntergefahren. Bitte Stromkabel abziehen.", {
+ kind: "info",
+ title: "Herunterfahren erfolgreich"
+ });
+
+ window.location = "index.html";
+}
+
+function showPassword() {
+ switch (passwordNewEl.type) {
+ case "password":
+ passwordNewEl.type = "text";
+ passwordRepeatEl.type = "text";
+ break;
+ case "text":
+ passwordNewEl.type = "password";
+ passwordRepeatEl.type = "password";
+ break;
+ }
+}
+
+async function changePassword() {
+ passwordOldEl.disabled = true;
+ passwordNewEl.disabled = true;
+ passwordRepeatEl.disabled = true;
+ passwordSubmitEl.disabled = true;
+ passwordStatusEl.innerText = "Änderungsanfrage...";
+ document.body.style.cursor = "progress";
+
+ passwordStatusEl.innerText = await invoke("change_sys_password", {
+ old: passwordOldEl.value,
+ to: passwordNewEl.value,
+ repeat: passwordRepeatEl.value,
+ });
+
+ passwordOldEl.disabled = false;
+ passwordNewEl.disabled = false;
+ passwordRepeatEl.disabled = false;
+ passwordSubmitEl.disabled = false;
+ document.body.style.cursor = "default";
+
+ if (passwordStatusEl.innerText === "Änderung erfolgreich") {
+ await message("Passwort erfolgreich geändert. Melden Sie sich neu an, um das Verwaltungswerkzeug weiter benutzen zu können.", {
+ kind: "info",
+ title: "Neuanmeldung erforderlich",
+ });
+
+ window.location = "index.html";
+ }
+}
+
+window.addEventListener("DOMContentLoaded", () => {
+ document.querySelector("#power-reboot").addEventListener("click", (e) => {
+ e.preventDefault();
+ reboot();
+ });
+ document.querySelector("#power-shutdown").addEventListener("click", (e) => {
+ e.preventDefault();
+ shutdown();
+ });
+
+ passwordOldEl = document.querySelector("#password-old");
+ passwordNewEl = document.querySelector("#password-new");
+ passwordRepeatEl = document.querySelector("#password-repeat");
+ passwordSubmitEl = document.querySelector("#password-submit");
+ passwordStatusEl = document.querySelector("#password-status");
+
+ document.querySelector("#password-show").addEventListener("click", (e) => {
+ e.preventDefault();
+ showPassword();
+ });
+ document.querySelector("#password-form").addEventListener("submit", (e) => {
+ e.preventDefault();
+ changePassword();
+ });
+});
diff --git a/src/wan.js b/src/wan.js
index 675ef18..40e9a6c 100644
--- a/src/wan.js
+++ b/src/wan.js
@@ -214,7 +214,6 @@ window.addEventListener("DOMContentLoaded", () => {
e.preventDefault();
showCredentials();
});
-
document.querySelector("#credentials-form").addEventListener("submit", (e) => {
e.preventDefault();
changeCredentials();