Merge pull request 'Feature: Passwort-Reset-Skript und Doku' (#78) from fds2610-bot/Steuerkram:main into main

Reviewed-on: https://codeberg.org/fds2610/Steuerkram/pulls/78
This commit is contained in:
fds2610 2026-05-21 14:58:24 +02:00
commit 0b3aed91a6
3 changed files with 59 additions and 1 deletions

View file

@ -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 <username> <neues_passwort>
# Beispiel:
docker compose exec web php scripts/reset-password.php Meinuser geheim123
```

View file

@ -0,0 +1,45 @@
<?php
/**
* Passwort eines Benutzers zurücksetzen.
* Aufruf: php scripts/reset-password.php <username> <neues_passwort>
*/
if ($argc !== 3) {
echo 'Verwendung: php scripts/reset-password.php <username> <neues_passwort>' . 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;

View file

@ -1 +1 @@
1-260517
1-260521