{% extends "tesm_core/base.html" %} {% from "tesm_core/_group_picker.html" import group_picker %} {% from "tesm_core/macros.html" import field, select_field, checkbox, alert, pill, empty_state %} {% block page_title %}Verzeichnisdienst{% endblock %} {% block page_sub %} LDAP / Active Directory · {% if values.ldap_enabled %}aktiv{% else %}nicht aktiv{% endif %} {% endblock %} {% block content %} {% if license_hint %}{{ alert(license_hint, 'warning') }}{% endif %} {{ alert('Same Sign-On, nicht Single Sign-On: der Benutzer tippt sein Verzeichnispasswort auf der normalen Anmeldeseite ein. Es wird bei jeder Anmeldung live gegen das Verzeichnis geprueft und niemals hier gespeichert.', 'info') }} {% if values.ldap_security == 'none' %} {{ alert('Die Verbindung ist unverschluesselt. Das Passwort geht dabei im Klartext ueber das Netz -- nur fuer Testumgebungen vertretbar.', 'danger', 'Unverschluesselt') }} {% elif not values.ldap_verify_cert %} {{ alert('Das Serverzertifikat wird nicht geprueft. Damit schuetzt die Verschluesselung nur gegen passives Mitlesen, nicht gegen einen Man-in-the-Middle.', 'warning', 'Zertifikat ungeprueft') }} {% endif %}
{{ icon('users', size=17) }} Verbindung
{% if current_user.has('settings_directory.execute') %}
{% endif %}
{{ checkbox('ldap_enabled', 'Verzeichnisanmeldung aktiv', checked=values.ldap_enabled, disabled=bool(license_hint)) }}
{{ field('ldap_host', 'Server', value=values.ldap_host, disabled=bool(license_hint), placeholder='dc01.firma.local') }} {{ field('ldap_port', 'Port', value=values.ldap_port, type='number', disabled=bool(license_hint), attrs='id="ldap-port"') }} {# Der Transport setzt den Port mit. Wer umstellt und den Port stehen laesst, bekommt eine Verbindung, die auf gut Glueck scheitert -- und die Meldung ("Zeitlimit") sagt nichts ueber die Ursache. Ein absichtlich abweichender Port bleibt erhalten. #} {{ select_field('ldap_security', 'Transport', specs['ldap_security'].choices, selected=values.ldap_security, disabled=bool(license_hint), attrs='data-behavior="transport-port" data-port-target="#ldap-port"') }} {{ field('ldap_timeout', 'Zeitlimit (s)', value=values.ldap_timeout, type='number', disabled=bool(license_hint)) }} {{ field('ldap_ca_file', 'CA-Zertifikat (Pfad)', value=values.ldap_ca_file, disabled=bool(license_hint), extra_class='field--full', hint_text='Leer = Systemvertrauensspeicher.') }} {{ field('ldap_base_dn', 'Basis-DN', value=values.ldap_base_dn, disabled=bool(license_hint), extra_class='field--full', hint_text='Leer = automatisch per RootDSE ermitteln.') }} {{ field('ldap_user_attribute', 'Anmeldeattribut', value=values.ldap_user_attribute, disabled=bool(license_hint)) }} {{ field('ldap_email_attribute', 'E-Mail-Attribut', value=values.ldap_email_attribute, disabled=bool(license_hint)) }}
{{ checkbox('ldap_verify_cert', 'Serverzertifikat pruefen', checked=values.ldap_verify_cert, disabled=bool(license_hint)) }} {{ checkbox('ldap_group_sync', 'Gruppen aus dem Verzeichnis uebernehmen', checked=values.ldap_group_sync, disabled=bool(license_hint)) }} {{ checkbox('ldap_allow_insecure', 'Unverschluesselte Verbindung ausdruecklich erlauben', checked=values.ldap_allow_insecure, disabled=bool(license_hint), hint_text=specs['ldap_allow_insecure'].hint) }}
Dienstkonto fuer die Suche (nur Lesezugriff noetig)
{{ field('bind_username', 'Benutzer', value=bind_username, autocomplete='off', disabled=not current_user.has('settings_directory.secrets')) }} {{ field('bind_password', 'Passwort (leer = unveraendert)', type='password', autocomplete='new-password', disabled=not current_user.has('settings_directory.secrets')) }}
{% if not current_user.has('settings_directory.secrets') %}

Zum Setzen des Bind-Passworts fehlt Ihnen das Recht „Geheimnisse“.

{% endif %}
{{ icon('shield-users', size=17) }} Gruppen-Zuordnung
Verzeichnisgruppe → Gruppe in dieser Anwendung, bei jeder Anmeldung neu ausgewertet
{% if mappings %}
{% for entry in mappings %} {% endfor %}
VerzeichnisgruppeGruppe hier
{{ entry.ad_group_name }}
{{ entry.ad_group_dn }}
{{ pill(entry.group_name or 'unbekannt', 'accent') }}
{% else %} {{ empty_state('Keine Zuordnungen', 'Ohne Zuordnung erhalten Verzeichniskonten nur die Standardgruppe.', 'shield-users') }} {% endif %} {% if current_user.has('settings_directory.edit') %}
{{ group_picker('ad_group_name', 'ad_group_dn', 'mapping', required=True) }} {# Ohne Ziel ist die Zuordnung sinnlos -- deshalb Pflichtfeld. #}
{% endif %}
{% endblock %}