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>
82 lines
3.7 KiB
HTML
82 lines
3.7 KiB
HTML
{% extends "tesm_core/base.html" %}
|
|
{% from "tesm_core/macros.html" import field, checkbox, alert, pill %}
|
|
|
|
{% block page_title %}E-Mail-Versand{% endblock %}
|
|
{% block page_sub %}
|
|
Microsoft Graph (App-only) ·
|
|
{% if ready %}einsatzbereit{% else %}nicht vollständig konfiguriert{% endif %}
|
|
{% endblock %}
|
|
|
|
{% block topbar_extra %}
|
|
{% if current_user.has('settings_mail.execute') %}
|
|
<form method="post" action="{{ url_for('settings.mail_test') }}" data-no-guard>
|
|
<input type="hidden" name="{{ csrf_field_name }}" value="{{ csrf_token() }}">
|
|
<button class="btn btn--sm" type="submit" data-busy-label="Teste ...">
|
|
{{ icon('activity', size=15) }} Verbindung testen
|
|
</button>
|
|
</form>
|
|
{% endif %}
|
|
{% endblock %}
|
|
|
|
{% block content %}
|
|
{{ alert('Der Versand läuft über den Client-Credentials-Flow von Microsoft Graph -- kein SMTP,
|
|
kein zusätzliches Paket. Die Anwendung braucht in Azure die Anwendungsberechtigung
|
|
Mail.Send. Der Verbindungstest holt nur ein Token und verschickt
|
|
bewusst keine echte Nachricht.', 'info') }}
|
|
|
|
<div class="grid grid--split">
|
|
<section class="card">
|
|
<div class="card__header">
|
|
<div class="flex-1"><div class="card__title">{{ icon('mail', size=17) }} Zugang</div></div>
|
|
</div>
|
|
<form method="post" action="{{ url_for('settings.mail_save') }}">
|
|
<input type="hidden" name="{{ csrf_field_name }}" value="{{ csrf_token() }}">
|
|
<div class="card__body stack">
|
|
{{ checkbox('graph_enabled', 'E-Mail-Versand aktiv', checked=values.graph_enabled,
|
|
disabled=not current_user.has('settings_mail.edit')) }}
|
|
<div class="form-grid">
|
|
{{ field('graph_tenant_id', 'Verzeichnis-ID (Tenant)', value=values.graph_tenant_id,
|
|
disabled=not current_user.has('settings_mail.edit')) }}
|
|
{{ field('graph_client_id', 'Anwendungs-ID (Client)', value=values.graph_client_id,
|
|
disabled=not current_user.has('settings_mail.edit')) }}
|
|
{{ field('graph_sender', 'Absender-Postfach', value=values.graph_sender, type='email',
|
|
disabled=not current_user.has('settings_mail.edit')) }}
|
|
{{ field('graph_reply_to', 'Antwortadresse', value=values.graph_reply_to, type='email',
|
|
disabled=not current_user.has('settings_mail.edit')) }}
|
|
</div>
|
|
<fieldset class="fieldset">
|
|
<legend>Client-Secret {% if has_secret %}{{ pill('gesetzt', 'online') }}{% else %}{{ pill('fehlt', 'warning') }}{% endif %}</legend>
|
|
{{ field('client_secret', 'Neues Secret (leer = unverändert)', type='password',
|
|
autocomplete='new-password', disabled=not can_secrets) }}
|
|
{% if not can_secrets %}
|
|
<p class="fs-xs faint mt-2">
|
|
Zum Setzen des Secrets fehlt Ihnen das Recht „Geheimnisse“.
|
|
</p>
|
|
{% endif %}
|
|
</fieldset>
|
|
</div>
|
|
{% if current_user.has('settings_mail.edit') %}
|
|
<div class="card__footer"><button class="btn btn--primary" type="submit">Speichern</button></div>
|
|
{% endif %}
|
|
</form>
|
|
</section>
|
|
|
|
<section class="card">
|
|
<div class="card__header">
|
|
<div class="flex-1"><div class="card__title">{{ icon('info', size=17) }} Wofür der Versand genutzt wird</div></div>
|
|
</div>
|
|
<div class="card__body">
|
|
<ul class="stack stack--tight fs-sm muted">
|
|
<li>Lizenzdatei an den Kunden senden (mit Anhang).</li>
|
|
<li>Zugangslink für das Kundenportal.</li>
|
|
</ul>
|
|
<div class="divider"></div>
|
|
<p class="fs-sm muted">
|
|
Das Secret liegt AES-256-GCM-verschlüsselt in der Datenbank, gebunden an seinen
|
|
Verwendungszweck. Ohne die Schlüsseldatei dieser Installation ist es nicht lesbar.
|
|
</p>
|
|
</div>
|
|
</section>
|
|
</div>
|
|
{% endblock %}
|