canManage()) { http_response_code(403); echo 'Kein Zugriff auf LDAP-Test.'; exit; } $ldap = new LdapProvisioner($config); $csrfToken = (string) ($_SESSION['ldap_test_token'] ?? ''); if ($csrfToken === '') { $csrfToken = bin2hex(random_bytes(16)); $_SESSION['ldap_test_token'] = $csrfToken; } $serviceResult = $ldap->testServiceBind(); $messages = []; $errors = []; $loginForm = ['username' => '', 'password' => '']; $passwordForm = ['username' => '', 'current_password' => '', 'new_password' => '', 'new_password_confirm' => '']; if ($_SERVER['REQUEST_METHOD'] === 'POST') { $postedToken = (string) ($_POST['csrf_token'] ?? ''); if ($postedToken === '' || !hash_equals($csrfToken, $postedToken)) { $errors[] = 'Die Formularprüfung ist fehlgeschlagen.'; } else { $action = (string) ($_POST['action'] ?? ''); if ($action === 'test-login') { $loginForm['username'] = trim((string) ($_POST['username'] ?? '')); $loginForm['password'] = (string) ($_POST['password'] ?? ''); if ($loginForm['username'] === '' || $loginForm['password'] === '') { $errors[] = 'Für den Login-Test sind Benutzername und Passwort erforderlich.'; } else { $result = $ldap->testUserCredentials($loginForm['username'], $loginForm['password']); if ($result['success'] ?? false) { $messages[] = $result['message'] . ' DN: ' . (string) ($result['dn'] ?? ''); } else { $errors[] = (string) ($result['message'] ?? 'LDAP-Login fehlgeschlagen.'); } } } if ($action === 'change-password') { $passwordForm['username'] = trim((string) ($_POST['username'] ?? '')); $passwordForm['current_password'] = (string) ($_POST['current_password'] ?? ''); $passwordForm['new_password'] = (string) ($_POST['new_password'] ?? ''); $passwordForm['new_password_confirm'] = (string) ($_POST['new_password_confirm'] ?? ''); if ($passwordForm['username'] === '') { $errors[] = 'Für die Passwortänderung ist ein Benutzername erforderlich.'; } if ($passwordForm['current_password'] === '') { $errors[] = 'Bitte das aktuelle Passwort angeben, damit der Login vorab geprüft werden kann.'; } if (strlen($passwordForm['new_password']) < 12) { $errors[] = 'Das neue Passwort muss mindestens 12 Zeichen lang sein.'; } if ($passwordForm['new_password'] !== $passwordForm['new_password_confirm']) { $errors[] = 'Die neuen Passwörter stimmen nicht überein.'; } if ($errors === []) { $loginCheck = $ldap->testUserCredentials($passwordForm['username'], $passwordForm['current_password']); if (!(bool) ($loginCheck['success'] ?? false)) { $errors[] = 'Der Vorab-Login mit aktuellem Passwort ist fehlgeschlagen: ' . (string) ($loginCheck['message'] ?? ''); } else { $result = $ldap->updateUserPassword($passwordForm['username'], $passwordForm['new_password']); if ($result['success'] ?? false) { $messages[] = $result['message'] . ' DN: ' . (string) ($result['dn'] ?? ''); $passwordForm = ['username' => '', 'current_password' => '', 'new_password' => '', 'new_password_confirm' => '']; } else { $errors[] = (string) ($result['message'] ?? 'Passwortänderung fehlgeschlagen.'); } } } } } } ?> LDAP-Test

Login testen

Passwort ändern