Echte Umlaute in allen Texten der Oberflaeche und in den Markdown-Dateien. Die Einbindung von Dateifreigaben haengt jetzt an der Sitzung: wird sie widerrufen oder laeuft sie ab, verschwinden die Freigaben mit ihr. Neu einstellbar ist die automatische Abmeldung bei Leerlauf (Vorgabe 30 Minuten). Ein Geraet, das nicht antwortet, bietet nur noch "Einschalten (PoE)" an -- Neustart ueber SSH oder RPC braucht ein erreichbares Geraet. Der Zeitgeber der naechsten Pruefung und die Restlaufzeit der Lizenz stehen jetzt oben in der Kopfzeile; der doppelte Knopf darunter ist weg. Millisekunden werden ab einer Sekunde als Sekunden und ab einer Minute als m:ss dargestellt. Ausserdem: Release-Tarball nicht mehr im Repository -- er haengt am Release. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
69 lines
2.5 KiB
HTML
69 lines
2.5 KiB
HTML
{% extends "tesm_core/base.html" %}
|
|
{% from "tesm_core/macros.html" import alert %}
|
|
|
|
{% block page_title %}Offline-Aktivierung{% endblock %}
|
|
{% block page_sub %}Code des Kunden verarbeiten und Antwortcode zurückgeben{% endblock %}
|
|
|
|
{% block content %}
|
|
{{ alert('Beide Codes sind signierte Protokollobjekte -- inhaltlich identisch mit dem
|
|
Online-Weg, nur als kopierbarer Text. Die Prüfungen (Signatur, Frische, Nonce, Fingerprint)
|
|
laufen exakt gleich; es gibt hier keine Abkürzung.', 'info') }}
|
|
|
|
<div class="grid grid--split">
|
|
<section class="card">
|
|
<div class="card__header">
|
|
<div class="flex-1"><div class="card__title">{{ icon('upload', size=17) }} Code des Kunden</div></div>
|
|
</div>
|
|
<form method="post">
|
|
<input type="hidden" name="{{ csrf_field_name }}" value="{{ csrf_token() }}">
|
|
<div class="card__body">
|
|
<label class="field">
|
|
<span class="field__label">Anfragecode</span>
|
|
<textarea class="textarea input--mono" name="code" rows="8" required
|
|
placeholder="Vom Kunden erhaltenen Code einfügen ..."></textarea>
|
|
<span class="field__hint">Umbrüche und Leerzeichen sind erlaubt.</span>
|
|
</label>
|
|
</div>
|
|
<div class="card__footer">
|
|
<button class="btn btn--primary" type="submit" data-busy-label="Verarbeite ...">
|
|
Verarbeiten
|
|
</button>
|
|
</div>
|
|
</form>
|
|
</section>
|
|
|
|
<div class="stack">
|
|
{% if summary %}
|
|
<section class="card">
|
|
<div class="card__header">
|
|
<div class="flex-1"><div class="card__title">{{ icon('info', size=17) }} Inhalt der Anfrage</div></div>
|
|
</div>
|
|
<div class="card__body">
|
|
<dl class="kv fs-sm">
|
|
{% for key, value in summary.items() %}
|
|
<dt>{{ key }}</dt><dd class="mono break-all">{{ value }}</dd>
|
|
{% endfor %}
|
|
</dl>
|
|
</div>
|
|
</section>
|
|
{% endif %}
|
|
{% if response_code %}
|
|
<section class="card card--accent">
|
|
<div class="card__header">
|
|
<div class="flex-1">
|
|
<div class="card__title">{{ icon('download', size=17) }} Antwortcode</div>
|
|
<div class="card__sub">{{ message }}</div>
|
|
</div>
|
|
<button class="btn btn--sm" type="button" data-copy="#response-code">
|
|
{{ icon('copy', size=14) }} Kopieren
|
|
</button>
|
|
</div>
|
|
<div class="card__body">
|
|
<pre class="code-block code-block--wrap" id="response-code">{{ response_code }}</pre>
|
|
</div>
|
|
</section>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
{% endblock %}
|