diff --git a/docs/konfiguration.md b/docs/konfiguration.md index ff89fd0..99b2fcf 100644 --- a/docs/konfiguration.md +++ b/docs/konfiguration.md @@ -93,3 +93,16 @@ Damit `docker compose exec` ohne `sudo` funktioniert, muss der User in der Docke sudo usermod -aG docker $USER # Danach neu einloggen ``` + +--- + +## Benutzer-Passwort zurücksetzen + +Das Skript `scripts/reset-password.php` setzt das Passwort eines vorhandenen Benutzers auf einen neuen Wert. Es nimmt den Benutzernamen und das neue Passwort als Parameter entgegen, erzeugt einen bcrypt-Hash und aktualisiert den Eintrag in der Datenbank. Wird der Benutzer nicht gefunden, gibt es eine Fehlermeldung und ändert nichts. + +```bash +docker compose exec web php scripts/reset-password.php + +# Beispiel: +docker compose exec web php scripts/reset-password.php Meinuser geheim123 +``` diff --git a/scripts/reset-password.php b/scripts/reset-password.php new file mode 100644 index 0000000..bc37ee9 --- /dev/null +++ b/scripts/reset-password.php @@ -0,0 +1,45 @@ + + */ + +if ($argc !== 3) { + echo 'Verwendung: php scripts/reset-password.php ' . PHP_EOL; + exit(1); +} + +$username = $argv[1]; +$newPassword = $argv[2]; + +$host = getenv('DB_HOST') ?: 'db'; +$dbName = getenv('DB_NAME') ?: 'steuerkram'; +$dbUser = getenv('DB_USER') ?: 'steuerkram'; +$dbPass = getenv('DB_PASS') ?: 'steuerkram'; + +try { + $pdo = new PDO( + "mysql:host=$host;dbname=$dbName;charset=utf8mb4", + $dbUser, + $dbPass, + [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION] + ); +} catch (PDOException $e) { + echo 'FEHLER: DB-Verbindung fehlgeschlagen: ' . $e->getMessage() . PHP_EOL; + exit(1); +} + +$stmt = $pdo->prepare('SELECT COUNT(*) FROM users WHERE username = ?'); +$stmt->execute([$username]); + +if ((int) $stmt->fetchColumn() === 0) { + echo 'FEHLER: Benutzer "' . $username . '" wurde nicht gefunden.' . PHP_EOL; + exit(1); +} + +$hash = password_hash($newPassword, PASSWORD_BCRYPT); + +$stmt = $pdo->prepare('UPDATE users SET password_hash = ? WHERE username = ?'); +$stmt->execute([$hash, $username]); + +echo 'Passwort für Benutzer "' . $username . '" wurde erfolgreich geändert.' . PHP_EOL; diff --git a/src/version.txt b/src/version.txt index ac0ef50..2947c29 100644 --- a/src/version.txt +++ b/src/version.txt @@ -1 +1 @@ -1-260517 +1-260521