#!/usr/bin/env php * docker compose exec web php scripts/e2e-user.php --delete * * Die Defaults entsprechen tests/e2e/helpers/env.js. */ $projectRoot = dirname(__DIR__); if (!file_exists($projectRoot . '/vendor/autoload.php')) { fwrite(STDERR, "Fehler: vendor/autoload.php nicht gefunden. Bitte 'composer install' ausführen.\n"); exit(1); } require $projectRoot . '/vendor/autoload.php'; \Steuerkram\Config::load(); use Steuerkram\Database; use Steuerkram\Models\User; const E2E_DEFAULT_USER = 'e2e'; const E2E_DEFAULT_PASSWORD = 'e2e-test-Pass123!'; $args = array_slice($argv, 1); $delete = in_array('--delete', $args, true); $args = array_values(array_filter($args, static fn(string $a): bool => $a !== '--delete')); $username = $args[0] ?? E2E_DEFAULT_USER; $password = $args[1] ?? E2E_DEFAULT_PASSWORD; $existing = User::findByUsername($username); if ($delete) { if (!$existing) { echo "Testnutzer \"{$username}\" existiert nicht – nichts zu tun.\n"; exit(0); } User::delete((int)$existing['id']); echo "Testnutzer \"{$username}\" gelöscht.\n"; exit(0); } if ($existing) { $id = (int)$existing['id']; User::update($id, $username, $password); User::setActive($id, true); User::setRole($id, 'admin'); User::resetFailedLogins($id); echo "Testnutzer \"{$username}\" aktualisiert (Passwort neu gesetzt, aktiv, entsperrt, Rolle admin).\n"; } else { // Rolle admin, damit die E2E-Suite auch die Benutzerverwaltung // (/useradmin) erreichen kann (Fix #147). User::create($username, $password, 'admin'); $created = User::findByUsername($username); if (!$created) { fwrite(STDERR, "Fehler: Testnutzer \"{$username}\" konnte nicht angelegt werden.\n"); exit(1); } echo "Testnutzer \"{$username}\" angelegt.\n"; } // Gegenprobe: Das Passwort muss zum gespeicherten Hash passen, sonst läuft der // E2E-Login in den Throttle und sperrt den Account. $check = User::findByUsername($username); if (!$check || !password_verify($password, $check['password_hash'])) { fwrite(STDERR, "Fehler: Passwortprüfung für \"{$username}\" fehlgeschlagen.\n"); exit(1); } $anzahl = (int)(Database::fetchOne('SELECT COUNT(*) AS n FROM users')['n'] ?? 0); echo "Benutzer in der Datenbank: {$anzahl}\n"; echo "E2E-Tests starten mit: tests/e2e/run.sh\n";