3declare(strict_types=1);
5require_once dirname(__DIR__) .
'/include/login.class.php';
12 throw new RuntimeException($message);
16$class =
new ReflectionClass(login::class);
27 'admin/123456 muss unabhängig von älteren DB3-Einstellungen einen Passwortwechsel erzwingen.'
31 'Ein individueller Admin-Zugang darf nicht als Standardpasswort gelten.'
38 'settings' => json_encode(array(
'password_reset_required' => 1)),
42 'Das vorhandene Kennzeichen password_reset_required muss weiter unterstützt werden.'
53 'Das unsichere Initialpasswort darf nicht erneut gespeichert werden.'
58 'Sicher-2026!Passwort',
59 'Anders-2026!Passwort',
61 )[
'password_repeat']),
62 'Abweichende Passwortwiederholungen müssen abgelehnt werden.'
67 'Sicher-2026!Passwort',
68 'Sicher-2026!Passwort',
71 'Ein starkes, neues Passwort muss akzeptiert werden.'
81 'Eine konfigurierte Mindestlänge von 6 Zeichen muss bei erfüllten Qualitätsregeln akzeptiert werden.'
91 'Ein Passwort unterhalb der konfigurierten Mindestlänge muss abgelehnt werden.'
101 str_contains((
string)(
$detailedErrors[
'password_new'] ??
''),
'mindestens 6 Zeichen')
102 && str_contains((
string)(
$detailedErrors[
'password_new'] ??
''),
'ein Großbuchstabe')
103 && str_contains((
string)(
$detailedErrors[
'password_new'] ??
''),
'eine Zahl')
104 && str_contains((
string)(
$detailedErrors[
'password_new'] ??
''),
'ein Sonderzeichen'),
105 'Die Fehlermeldung muss alle noch nicht erfüllten Passwortkriterien einzeln nennen.'
108$source = (string)file_get_contents(dirname(__DIR__) .
'/include/login.class.php');
110 dirname(__DIR__, 3) .
'/include/dbxPasswordPolicy.class.php'
113 dirname(__DIR__) .
'/tpl/htm/form-password-change.htm'
116 str_contains(
$source,
'pending_password_reset')
117 && str_contains(
$source,
"unset(\$settings['password_reset_required'])")
118 && str_contains(
$source,
'password_hash($password, PASSWORD_DEFAULT)')
119 && str_contains(
$source,
'dbx()->login($uid)'),
120 'Der erzwungene Passwortwechsel ist nicht vollständig abgeschlossen.'
128 'Gesperrte Benutzer dürfen nicht über den initialen Passwortwechsel freigeschaltet werden.'
131 str_contains(
$template,
'{obj:password_new}')
132 && str_contains(
$template,
'{obj:password_repeat}')
133 && str_contains(
$template,
'{password_min_length}')
134 && str_contains(
$template,
'data-password-rule="length"')
135 && str_contains(
$template,
'data-password-rule="match"')
136 && str_contains(
$template,
'bi-x-circle-fill')
137 && str_contains(
$template,
'Ein neues sicheres Passwort festlegen')
138 && str_contains(
$source,
'Für diesen Zugang ist ein neues persönliches Passwort erforderlich.')
140 && str_contains(
$source,
'\\dbxPasswordPolicy::errors(')
141 && str_contains(
$template,
'Neues Passwort speichern'),
142 'Das Passwortänderungsformular ist unvollständig.'
145echo
"OK forced password change and legacy admin compatibility\n";
login_password_reset_assert(bool $condition, string $message)