Files
CodePress/cli/reset-admin-password.php
E.Noorlander d9ea2eee47 v2.6.5 (Lyra): Dynamische pad-resolutie, WordPress-stijl docblocks, security-fix wachtwoord, git-historie schoon
- Bug: dashboard toonde 0 content (AdminPluginAPI::getContentDir() gaf relatief pad terug zonder normalisatie)
- Dynamische pad-resolutie: PluginAPIInterface uitgebreid met getProjectRoot/getContentDir/getPluginsDir/getVersionInfo; CMSAPI en AdminPluginAPI implementeren deze universeel
- public/index.php media-serving gebruikt $config['content_dir'] i.p.v. hardcoded /content
- Navigation en Logs plugins halen paden via de API i.p.v. hardcoded dirname(__DIR__)
- WordPress-stijl docblocks toegevoegd voor alle classes, methods, properties en functies (~450 docblocks, @since 2.6.5)
- Security: hardcoded plaintext-wachtwoord 'admin' verwijderd uit AdminAuth.php; bij eerste installatie wordt een cryptografisch veilig wachtwoord gegenereerd (random_bytes, 16 tekens) en eenmalig op het inlogscherm getoond
- Security: git-geschiedenis schoongemaakt (admin.json, admin.json.example, admin-console/config/admin.json verwijderd uit alle commits; filter-branch over alle branches + tags, gc --prune --aggressive)
- README.md, README.en.md, AGENTS.md bijgewerkt
- Test-scripts bijgewerkt naar clean-URL structuur + actuele ARIA-waarden
- Versie verhoogd naar 2.6.5
- Tests: pentest 29/29, WCAG 25/25, functioneel 16/16, enhanced 25/25
2026-08-27 09:05:51 +00:00

114 lines
3.2 KiB
PHP
Executable File

#!/usr/bin/env php
<?php
/**
* CodePress CMS — Admin wachtwoord reset CLI.
*
* Reset het wachtwoord van een admin-gebruiker via de command line. Genereert
* een random wachtwoord wanneer er geen wordt meegegeven en wist tevens de
* brute-force lockout voor de gebruiker, zodat direct inloggen weer mogelijk is.
*
* Gebruik:
* php cli/reset-admin-password.php [gebruikersnaam] [nieuw_wachtwoord]
*
* Als geen wachtwoord opgegeven, wordt een random wachtwoord gegenereerd.
* Wisst ook brute-force lockout voor de gebruiker.
*
* Voorbeelden:
* php cli/reset-admin-password.php admin
* php cli/reset-admin-password.php admin MijnNieuweWachtwoord123
*
* @since 2.6.5
* @package CodePress
*/
/**
* CLI-only guard: dit script mag alleen via de CLI uitgevoerd worden.
*
* @since 2.6.5
*/
if (php_sapi_name() !== 'cli') {
fwrite(STDERR, "Dit script kan alleen via de CLI uitgevoerd worden.\n");
exit(1);
}
$rootDir = dirname(__DIR__);
require_once $rootDir . '/admin/src/AdminAuth.php';
$appConfig = require $rootDir . '/admin/config/app.php';
/**
* Argumenten parsen en gebruik tonen bij ontbrekende gebruikersnaam.
*
* @since 2.6.5
*/
// Argumenten parsen
$username = $argv[1] ?? '';
$password = $argv[2] ?? '';
if ($username === '') {
echo "CodePress CMS — Admin wachtwoord reset\n";
echo "========================================\n\n";
echo "Gebruik: php cli/reset-admin-password.php [gebruikersnaam] [nieuw_wachtwoord]\n\n";
echo "Als geen wachtwoord opgegeven, wordt een random wachtwoord gegenereerd.\n\n";
echo "Voorbeelden:\n";
echo " php cli/reset-admin-password.php admin\n";
echo " php cli/reset-admin-password.php admin MijnNieuweWachtwoord123\n";
exit(1);
}
/**
* AdminAuth aanmaken en controleren of de gebruiker bestaat.
*
* @since 2.6.5
*/
// AdminAuth aanmaken (zonder sessie requirements)
$auth = new AdminAuth($appConfig);
// Controleren of de gebruiker bestaat
$users = $auth->getUsers();
if (!isset($users[$username])) {
fwrite(STDERR, "Fout: Gebruiker '$username' niet gevonden.\n");
fwrite(STDERR, "Beschikbare gebruikers: " . implode(', ', array_keys($users)) . "\n");
exit(1);
}
/**
* Wachtwoord genereren indien niet expliciet opgegeven.
*
* @since 2.6.5
*/
// Wachtwoord genereren als niet opgegeven
if ($password === '') {
$password = bin2hex(random_bytes(12));
$generated = true;
} else {
$generated = false;
}
/**
* Wachtwoord wijzigen en brute-force lockout wissen.
*
* Bij een mislukte wachtwoordwijziging wordt met exit(1) afgesloten.
*
* @since 2.6.5
*/
// Wachtwoord wijzigen
$result = $auth->changePassword($username, $password);
if (!$result['success']) {
fwrite(STDERR, "Fout: " . $result['message'] . "\n");
exit(1);
}
// Lockout wissen
$auth->clearLockout($username);
echo "CodePress CMS — Admin wachtwoord reset\n";
echo "========================================\n\n";
echo "Gebruiker: $username\n";
echo "Wachtwoord: $password\n";
if ($generated) {
echo " (automatisch gegenereerd — bewaar dit veilig)\n";
}
echo "\n";
echo "Lockout voor '$username' is gewist.\n";
echo "Je kunt nu inloggen via /admin met het nieuwe wachtwoord.\n";