Eigenes CSS statt Framework, Vanilla-JavaScript, heller und dunkler Modus. Ohne JavaScript bleibt alles bedienbar; das Liniendiagramm faellt auf eine selbst gezeichnete Balkendarstellung zurueck, wenn das CDN nicht erreichbar ist. Chart.js ist auf eine Version festgelegt und per Subresource Integrity an seinen Hash gebunden. Die Domain-Seite enthaelt eine Schritt-fuer-Schritt-Anleitung fuer DNS, Hosting-Panel und Zertifikat samt Fehlersuche.
38 lines
1.2 KiB
PHP
38 lines
1.2 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @var App\Security\Csrf $csrf
|
|
* @var string $username
|
|
* @var string|null $error
|
|
*/
|
|
|
|
?>
|
|
<div class="card card--narrow">
|
|
<div class="card__head">
|
|
<span class="brand__mark brand__mark--lg" aria-hidden="true"></span>
|
|
<h1>Anmelden</h1>
|
|
<p class="muted">Die Verwaltung der Kurzlinks ist nur für angemeldete Benutzer zugänglich.</p>
|
|
</div>
|
|
|
|
<?php if ($error !== null): ?>
|
|
<div class="alert alert--error" role="alert"><?= $e($error) ?></div>
|
|
<?php endif; ?>
|
|
|
|
<form method="post" action="<?= $e($url('/login')) ?>" class="form">
|
|
<?= $csrf->field() ?>
|
|
|
|
<div class="field">
|
|
<label for="username">Benutzername</label>
|
|
<input type="text" id="username" name="username" value="<?= $e($username) ?>"
|
|
autocomplete="username" required autofocus>
|
|
</div>
|
|
|
|
<div class="field">
|
|
<label for="password">Passwort</label>
|
|
<input type="password" id="password" name="password" autocomplete="current-password" required>
|
|
</div>
|
|
|
|
<button type="submit" class="btn btn--primary btn--block">Anmelden</button>
|
|
</form>
|
|
</div>
|