- 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
114 lines
3.2 KiB
PHP
Executable File
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"; |