3define(
'dbxSystem',
'dbxWebApp');
4define(
'dbxRunAsAdmin', 1);
6require_once dirname(__DIR__, 3) .
'/vendor/autoload.php';
7require_once dirname(__DIR__, 3) .
'/include/dbxKernel.php';
8require_once dirname(__DIR__) .
'/include/dbxUser.class.php';
10$class =
new ReflectionClass(
'dbx\\dbxAdmin\\dbxUser');
15 'password_required' =>
'Bitte ein neues Passwort eingeben.',
16 'password_repeat_required' =>
'Bitte das neue Passwort wiederholen.',
17 'password_mismatch' =>
'Die Passwoerter stimmen nicht ueberein.',
18 'password_too_short' =>
'Das Passwort muss mindestens 6 Zeichen lang sein.',
19 'settings_empty' =>
'Leer',
21 'option_no' =>
'Nein',
22 'settings_not_set' =>
'Nicht gesetzt',
23 'settings_entries' =>
'{count} Einträge',
24 'settings_invalid' =>
'Ungültig',
25 'settings_email_confirmed' =>
'E-Mail bestätigt',
26 'settings_link_expired' =>
'Bestätigungslink abgelaufen',
27 'settings_confirmation_pending' =>
'Bestätigung ausstehend',
28 'settings_no_confirmation' =>
'Keine Bestätigung',
29 'settings_registration_status' =>
'Registrierung',
30 'settings_mail_sent' =>
'E-Mail versendet',
31 'settings_link_valid_until' =>
'Link gültig bis',
32 'settings_password_change' =>
'Passwortwechsel erforderlich',
33 'settings_protected' =>
'Geschützt',
34 'settings_security_hint' =>
'Sicherheitswerte werden nicht angezeigt.',
37 public function get_fd_message(
string $key):
string {
38 return $this->messages[$key] ?? $key;
41 public function format_fd_message(
string $key, array $values):
string {
42 $message = $this->get_fd_message($key);
43 foreach ($values as $name =>
$value) {
44 $message = str_replace(
'{' . $name .
'}', (
string)
$value, $message);
51 array(
false,
'',
'',
false,
'',
''),
52 array(
true,
'',
'',
false,
'password_new',
'Bitte ein neues Passwort eingeben.'),
53 array(
false,
'abcdef',
'',
false,
'password_new2',
'Bitte das neue Passwort wiederholen.'),
54 array(
false,
'abcdef',
'abcdeg',
false,
'password_new2',
'Die Passwoerter stimmen nicht ueberein.'),
55 array(
false,
'abc',
'abc',
false,
'password_new',
'Das Passwort muss mindestens 6 Zeichen lang sein.'),
56 array(
false,
'Sicher-123',
'Sicher-123',
true,
'',
''),
57 array(
true,
'Sicher-123',
'Sicher-123',
true,
'',
''),
63 if ((
$result[
'change'] ??
null) !== $change
65 || (
$result[
'message'] ??
null) !== $message) {
66 fwrite(STDERR,
'FAIL: Passwortpruefung Fall ' . (
$index + 1) . PHP_EOL);
76 'password_reset_required' => 1,
77 'dashboard_layout' =>
'compact',
86 fwrite(STDERR,
"FAIL: Ein geändertes Passwort muss die Installationswarnung dauerhaft aufheben.\n");
90$template = file_get_contents(dirname(__DIR__) .
'/tpl/htm/form-admin-user.htm');
97 || substr_count((
string)
$template,
'{obj:password_new}') !== 1
98 || substr_count((
string)
$template,
'{obj:password_new2}') !== 1) {
99 fwrite(STDERR,
"FAIL: Beide Passwortfelder muessen einmalig im rechten Profil-Block stehen.\n");
103if (strpos((
string)
$template,
'{obj:settings_view}') ===
false
104 || strpos((
string)
$template,
'{obj:settings}') !==
false) {
105 fwrite(STDERR,
"FAIL: Einstellungen muessen strukturiert statt als JSON-Feld ausgegeben werden.\n");
112 'settings' => json_encode(array(
113 'register_confirm' => array(
114 'token_hash' =>
'DARF-NICHT-SICHTBAR-SEIN',
115 'expires' => time() - 60,
116 'sent' =>
'2026-05-29 17:10:56',
118 'password_reset_required' => 1,
120 'api_secret' =>
'DARF-AUCH-NICHT-SICHTBAR-SEIN',
124 || strpos(
$settingsHtml,
'Passwortwechsel erforderlich') ===
false
127 || strpos(
$settingsHtml,
'DARF-NICHT-SICHTBAR-SEIN') !==
false
128 || strpos(
$settingsHtml,
'DARF-AUCH-NICHT-SICHTBAR-SEIN') !==
false) {
129 fwrite(STDERR,
"FAIL: Strukturierte Einstellungen sind unvollstaendig oder zeigen Sicherheitswerte.\n");
133echo
"OK dbxAdmin user password change\n";
if( $profilePos===false||$passwordPos===false||$repeatPos===false||$contactPos===false||!( $profilePos< $passwordPos &&$passwordPos< $repeatPos &&$repeatPos< $contactPos)||substr_count((string) $template, '{obj:password_new}') !==1||substr_count((string) $template, '{obj:password_new2}') !==1) if(strpos((string) $template, '{obj:settings_view}')===false||strpos((string) $template, '{obj:settings}') !==false $settingsView)
foreach($cases as $index=> $case) $settingsAfterChange