second commit

This commit is contained in:
2026-08-19 22:33:19 +02:00
parent 411812e954
commit 199f306993
107 changed files with 5984 additions and 0 deletions

21
templates/dashboard.html Normal file
View File

@ -0,0 +1,21 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Jumphost Dashboard</title>
<link rel="stylesheet" href="/static/css/app.css">
</head>
<body>
<div class="topbar">
<div class="brand">Jumphost</div>
<div>
<span class="hint" id="whoami"></span>
<button id="logout-btn">Abmelden</button>
</div>
</div>
<div class="container" id="groups"></div>
<script src="/static/js/dashboard.js"></script>
</body>
</html>

46
templates/login.html Normal file
View File

@ -0,0 +1,46 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Jumphost Login</title>
<link rel="stylesheet" href="/static/css/app.css">
</head>
<body>
<div class="center-screen">
<div class="card">
<h1>Jumphost Anmeldung</h1>
<form id="login-form" data-step="password">
<div id="password-fields">
<label for="username">Benutzername</label>
<input type="text" id="username" autocomplete="username" required>
<label for="password">Passwort</label>
<input type="password" id="password" autocomplete="current-password" required>
</div>
<div id="totp-fields" style="display:none">
<label for="totp-code">Code aus der Authenticator-App</label>
<input type="text" id="totp-code" inputmode="numeric" pattern="[0-9]*" autocomplete="one-time-code">
<p class="hint">Bei erstmaliger Anmeldung: Secret unten scannen, danach den 6-stelligen Code eingeben.</p>
</div>
<div id="enroll-box" style="display:none">
<img id="qr-img" class="qr" alt="TOTP QR-Code" width="180" height="180">
<p class="hint">Mit einer Authenticator-App (z.B. Aegis, FreeOTP) scannen.</p>
</div>
<div id="recovery-box" style="display:none">
<p class="hint">Recovery-Codes -- jetzt sicher speichern, werden nicht erneut angezeigt:</p>
<div id="recovery-codes" class="recovery-codes"></div>
</div>
<button type="submit" id="submit-btn">Anmelden</button>
<div class="error" id="error-box"></div>
</form>
</div>
</div>
<script src="/static/js/login.js"></script>
</body>
</html>

23
templates/rdp.html Normal file
View File

@ -0,0 +1,23 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>RDP-Session</title>
<link rel="stylesheet" href="/static/css/app.css">
</head>
<body>
<div class="session-shell" id="session-shell">
<div class="session-toolbar">
<button id="fullscreen-btn">Vollbild</button>
<span class="spacer"></span>
<span class="status" id="status">Verbinde ...</span>
</div>
<div id="rdp-display"></div>
</div>
<script src="/static/js/vendor/guacamole-common.js"></script>
<script>window.JUMPHOST_HOST_ID = {{ host_id }};</script>
<script src="/static/js/rdp.js"></script>
</body>
</html>

27
templates/terminal.html Normal file
View File

@ -0,0 +1,27 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>SSH-Terminal</title>
<link rel="stylesheet" href="/static/css/app.css">
<link rel="stylesheet" href="/static/js/vendor/xterm.css">
</head>
<body>
<div class="session-shell" id="session-shell">
<div class="session-toolbar">
<button id="fullscreen-btn">Vollbild</button>
<button id="upload-btn">Datei hochladen</button>
<input type="file" id="file-input" style="display:none">
<span class="spacer"></span>
<span class="status" id="status">Verbinde ...</span>
</div>
<div id="terminal"></div>
</div>
<script src="/static/js/vendor/xterm.js"></script>
<script src="/static/js/vendor/xterm-addon-fit.js"></script>
<script>window.JUMPHOST_HOST_ID = {{ host_id }};</script>
<script src="/static/js/terminal.js"></script>
</body>
</html>