- Rollensystem: Public → Mitarbeiter → Admin (Rolle user entfällt) - DB-Migration: must_change_password-Spalte, user→mitarbeiter - require_staff_api(): erlaubt mitarbeiter + admin - POST /api/admin/invite: Einladung mit auto-generiertem Passwort + E-Mail - POST /auth/change-password: Pflicht-Passwortwechsel - Login: force_password_change-Redirect - Sidebar: sidebar-staff für Scheduler/NINA/Einstellungen - Scheduler/NINA: read-only für Mitarbeiter Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
42 lines
2.1 KiB
HTML
42 lines
2.1 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="de" data-bs-theme="light">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>MeshDD-Dashboard Passwort ändern</title>
|
|
<link href="https://cdn.jsdelivr.net/npm/@tabler/core@1.4.0/dist/css/tabler.min.css" rel="stylesheet">
|
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css" rel="stylesheet">
|
|
<link rel="stylesheet" href="/static/css/style.css">
|
|
</head>
|
|
<body class="antialiased d-flex align-items-center justify-content-center" style="min-height:100vh">
|
|
|
|
<div class="card card-outline card-warning" style="width:100%;max-width:400px;margin:1rem">
|
|
<div class="card-header py-2">
|
|
<h6 class="mb-0"><i class="bi bi-key me-1"></i>Passwort ändern</h6>
|
|
</div>
|
|
<div class="card-body">
|
|
<p class="small text-body-secondary mb-3">
|
|
<i class="bi bi-exclamation-triangle-fill text-warning me-1"></i>
|
|
Dein Konto erfordert einen Passwortwechsel. Bitte wähle ein neues Passwort.
|
|
</p>
|
|
<div id="cpAlert" class="alert py-1 small d-none mb-2"></div>
|
|
<div class="mb-2">
|
|
<label class="form-label small mb-1">Neues Passwort (min. 8 Zeichen)</label>
|
|
<input type="password" class="form-control form-control-sm" id="cpPassword" minlength="8" required>
|
|
</div>
|
|
<div class="mb-3">
|
|
<label class="form-label small mb-1">Passwort bestätigen</label>
|
|
<input type="password" class="form-control form-control-sm" id="cpConfirm" required>
|
|
</div>
|
|
<button class="btn btn-warning w-100 btn-sm" id="btnChangePassword">Passwort setzen</button>
|
|
</div>
|
|
<div class="card-footer py-1 text-center">
|
|
<small class="text-body-secondary" id="cpFooter"></small>
|
|
</div>
|
|
</div>
|
|
|
|
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
|
|
<script src="/static/js/change-password.js"></script>
|
|
</body>
|
|
</html>
|