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
This commit is contained in:
+42
-42
@@ -7,14 +7,14 @@
|
||||
* lockout en gebruikersbeheer. Alle data wordt opgeslagen in JSON-bestanden
|
||||
* (geen database).
|
||||
*
|
||||
* @since 2.6.4
|
||||
* @since 2.6.5
|
||||
*/
|
||||
class AdminAuth
|
||||
{
|
||||
/**
|
||||
* Applicatie-configuratie uit config.json.
|
||||
*
|
||||
* @since 2.6.4
|
||||
* @since 2.6.5
|
||||
* @var array Applicatie-configuratie.
|
||||
*/
|
||||
private array $config;
|
||||
@@ -22,7 +22,7 @@ class AdminAuth
|
||||
/**
|
||||
* Admin-configuratie geladen uit admin.json (gebruikers en security-instellingen).
|
||||
*
|
||||
* @since 2.6.4
|
||||
* @since 2.6.5
|
||||
* @var array Admin-configuratie met keys 'users' en 'security'.
|
||||
*/
|
||||
private array $adminConfig;
|
||||
@@ -30,7 +30,7 @@ class AdminAuth
|
||||
/**
|
||||
* Pad naar het JSON-bestand met mislukte inlogpogingen voor brute-force lockout.
|
||||
*
|
||||
* @since 2.6.4
|
||||
* @since 2.6.5
|
||||
* @var string Absoluut pad naar login_attempts.json.
|
||||
*/
|
||||
private string $lockFile;
|
||||
@@ -42,7 +42,7 @@ class AdminAuth
|
||||
* met een cryptografisch veilig willekeurig wachtwoord. De login-pagina
|
||||
* toont dit wachtwoord eenmalig via getGeneratedPassword().
|
||||
*
|
||||
* @since 2.6.4
|
||||
* @since 2.6.5
|
||||
* @var string Leeg tenzij net aangemaakt bij eerste installatie.
|
||||
*/
|
||||
private string $generatedPassword = '';
|
||||
@@ -53,7 +53,7 @@ class AdminAuth
|
||||
* Elke rol mapt naar een lijst van toegestane route-prefixen. De rol
|
||||
* 'admin' heeft wildcard '*' toegang tot alle routes.
|
||||
*
|
||||
* @since 2.6.4
|
||||
* @since 2.6.5
|
||||
* @var array<string, string[]> Map van rol-sleutel naar lijst met toegestane routes.
|
||||
*/
|
||||
public const ROLE_PERMISSIONS = [
|
||||
@@ -66,7 +66,7 @@ class AdminAuth
|
||||
/**
|
||||
* Leesbare rol-labels voor weergave in de admin-interface.
|
||||
*
|
||||
* @since 2.6.4
|
||||
* @since 2.6.5
|
||||
* @var array<string, string> Map van rol-sleutel naar label.
|
||||
*/
|
||||
public const ROLE_LABELS = [
|
||||
@@ -82,7 +82,7 @@ class AdminAuth
|
||||
* Laadt de admin-configuratie, bepaalt het pad naar het lockout-bestand en
|
||||
* start de sessie met de juiste security-instellingen.
|
||||
*
|
||||
* @since 2.6.4
|
||||
* @since 2.6.5
|
||||
*
|
||||
* @param array $appConfig Applicatie-configuratie; vereist keys 'log_file' en 'admin_config'.
|
||||
*/
|
||||
@@ -101,7 +101,7 @@ class AdminAuth
|
||||
* admin.json.example, of indien die ook ontbreekt met een standaard admin-
|
||||
* gebruiker. Geeft een lege structuur terug als de JSON ongeldig is.
|
||||
*
|
||||
* @since 2.6.4
|
||||
* @since 2.6.5
|
||||
*
|
||||
* @return array Admin-configuratie met keys 'users' en 'security'.
|
||||
*/
|
||||
@@ -155,7 +155,7 @@ class AdminAuth
|
||||
* en een vaste lengte, zodat het wachtwoord voldoende entropie heeft
|
||||
* en veilig te typen is.
|
||||
*
|
||||
* @since 2.6.4
|
||||
* @since 2.6.5
|
||||
*
|
||||
* @return string Willekeurig wachtwoord van 16 alfanumerieke tekens.
|
||||
*/
|
||||
@@ -178,7 +178,7 @@ class AdminAuth
|
||||
* wordt het veld geleegd. Geeft een lege string terug wanneer er
|
||||
* geen nieuw wachtwoord is gegenereerd in deze request.
|
||||
*
|
||||
* @since 2.6.4
|
||||
* @since 2.6.5
|
||||
*
|
||||
* @return string Plaintext wachtwoord of lege string.
|
||||
*/
|
||||
@@ -193,7 +193,7 @@ class AdminAuth
|
||||
* Schrijft de interne admin-configuratie weg als pretty-printed JSON met
|
||||
* behoud van unicode-tekens.
|
||||
*
|
||||
* @since 2.6.4
|
||||
* @since 2.6.5
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
@@ -212,7 +212,7 @@ class AdminAuth
|
||||
* de sessie en beëindigt deze bij inactiviteit langer dan de geconfigureerde
|
||||
* timeout. Vernieuwt de activiteit-timestamp bij geauthenticeerde gebruikers.
|
||||
*
|
||||
* @since 2.6.4
|
||||
* @since 2.6.5
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
@@ -255,7 +255,7 @@ class AdminAuth
|
||||
* en gelogd. Bij succes worden mislukte pogingen gewist en de sessie
|
||||
* gevuld met gebruiker, rol en CSRF-token.
|
||||
*
|
||||
* @since 2.6.4
|
||||
* @since 2.6.5
|
||||
*
|
||||
* @param string $username Gebruikersnaam.
|
||||
* @param string $password Wachtwoord (plaintext).
|
||||
@@ -299,7 +299,7 @@ class AdminAuth
|
||||
* Maakt de sessie-array leeg, verwijdert het sessie-cookie en vernietigt de
|
||||
* sessie. De uitlogactie wordt gelogd.
|
||||
*
|
||||
* @since 2.6.4
|
||||
* @since 2.6.5
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
@@ -321,7 +321,7 @@ class AdminAuth
|
||||
/**
|
||||
* Controleert of de huidige bezoeker is ingelogd.
|
||||
*
|
||||
* @since 2.6.4
|
||||
* @since 2.6.5
|
||||
*
|
||||
* @return bool True indien een admin-gebruiker in de sessie staat.
|
||||
*/
|
||||
@@ -336,7 +336,7 @@ class AdminAuth
|
||||
* Levert username en rol uit de sessie en vult deze aan met email,
|
||||
* author_name en author_email uit admin.json indien aanwezig.
|
||||
*
|
||||
* @since 2.6.4
|
||||
* @since 2.6.5
|
||||
*
|
||||
* @return array|null Gebruikersdata als array, of null indien niet ingelogd.
|
||||
*/
|
||||
@@ -366,7 +366,7 @@ class AdminAuth
|
||||
* Retourneert de override-rol indien ingesteld (voor test-doeleinden), anders
|
||||
* de werkelijke rol.
|
||||
*
|
||||
* @since 2.6.4
|
||||
* @since 2.6.5
|
||||
*
|
||||
* @return string Rol-sleutel.
|
||||
*/
|
||||
@@ -381,7 +381,7 @@ class AdminAuth
|
||||
/**
|
||||
* Geeft de werkelijke rol van de ingelogde gebruiker, eventuele override negerend.
|
||||
*
|
||||
* @since 2.6.4
|
||||
* @since 2.6.5
|
||||
*
|
||||
* @return string Rol-sleutel.
|
||||
*/
|
||||
@@ -393,7 +393,7 @@ class AdminAuth
|
||||
/**
|
||||
* Controleert of de ingelogde gebruiker een actieve rol-override heeft.
|
||||
*
|
||||
* @since 2.6.4
|
||||
* @since 2.6.5
|
||||
*
|
||||
* @return bool True indien een override-rol is ingesteld.
|
||||
*/
|
||||
@@ -409,7 +409,7 @@ class AdminAuth
|
||||
* 'admin' (zinloos) en enkel naar lagere rollen. Slaat de override op in de
|
||||
* sessie. De actie wordt gelogd.
|
||||
*
|
||||
* @since 2.6.4
|
||||
* @since 2.6.5
|
||||
*
|
||||
* @param string $role Doel-rol-sleutel.
|
||||
* @return array Resultaat met keys 'success' (bool) en 'message' (string).
|
||||
@@ -441,7 +441,7 @@ class AdminAuth
|
||||
*
|
||||
* Verwijdert de override uit de sessie indien aanwezig en logt de actie.
|
||||
*
|
||||
* @since 2.6.4
|
||||
* @since 2.6.5
|
||||
*
|
||||
* @return array Resultaat met keys 'success' (bool) en 'message' (string).
|
||||
*/
|
||||
@@ -461,7 +461,7 @@ class AdminAuth
|
||||
* Gebruikt de permissies van de huidige rol; de wildcard '*' geeft toegang
|
||||
* tot alles. Onbekende rollen krijgen enkel 'dashboard' en 'logout'.
|
||||
*
|
||||
* @since 2.6.4
|
||||
* @since 2.6.5
|
||||
*
|
||||
* @param string $route Route-sleutel die gecontroleerd moet worden.
|
||||
* @return bool True indien de gebruiker de route mag benaderen.
|
||||
@@ -481,7 +481,7 @@ class AdminAuth
|
||||
/**
|
||||
* Geeft alle beschikbare rollen met hun leesbare labels.
|
||||
*
|
||||
* @since 2.6.4
|
||||
* @since 2.6.5
|
||||
*
|
||||
* @return array<string, string> Map van rol-sleutel naar label.
|
||||
*/
|
||||
@@ -493,7 +493,7 @@ class AdminAuth
|
||||
/**
|
||||
* Geeft het leesbare label voor een rol.
|
||||
*
|
||||
* @since 2.6.4
|
||||
* @since 2.6.5
|
||||
*
|
||||
* @param string $role Rol-sleutel.
|
||||
* @return string Leesbaar label, of de rol-sleutel zelf indien onbekend.
|
||||
@@ -509,7 +509,7 @@ class AdminAuth
|
||||
* Slaat een cryptografisch willekeurig token op in de sessie en retourneert
|
||||
* dit voor gebruik in admin-formulieren.
|
||||
*
|
||||
* @since 2.6.4
|
||||
* @since 2.6.5
|
||||
*
|
||||
* @return string 64-tekens hexadecimaal CSRF-token.
|
||||
*/
|
||||
@@ -526,7 +526,7 @@ class AdminAuth
|
||||
*
|
||||
* Gebruikt hash_equals om timing-attacks te voorkomen.
|
||||
*
|
||||
* @since 2.6.4
|
||||
* @since 2.6.5
|
||||
*
|
||||
* @param string $token Token uit het formulier of verzoek.
|
||||
* @return bool True indien het token overeenkomt met het sessie-token.
|
||||
@@ -542,7 +542,7 @@ class AdminAuth
|
||||
* Maakt een nieuw cryptografisch willekeurig token aan, nuttig na
|
||||
* privilege-wijzigingen of na het verwerken van een formulier.
|
||||
*
|
||||
* @since 2.6.4
|
||||
* @since 2.6.5
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
@@ -559,7 +559,7 @@ class AdminAuth
|
||||
* Levert een array geïndexeerd op gebruikersnaam, aangevuld met het
|
||||
* leesbare rol-label en eventuele profielvelden.
|
||||
*
|
||||
* @since 2.6.4
|
||||
* @since 2.6.5
|
||||
*
|
||||
* @return array<string, array> Map van gebruikersnaam naar gebruikersdata.
|
||||
*/
|
||||
@@ -588,7 +588,7 @@ class AdminAuth
|
||||
* geldigheid van de rol. Het wachtwoord wordt opgeslagen als bcrypt-hash.
|
||||
* Wijzigingen worden direct weggeschreven en gelogd.
|
||||
*
|
||||
* @since 2.6.4
|
||||
* @since 2.6.5
|
||||
*
|
||||
* @param string $username Gebruikersnaam.
|
||||
* @param string $password Wachtwoord (plaintext, minimaal 8 tekens).
|
||||
@@ -630,7 +630,7 @@ class AdminAuth
|
||||
* Zoekt de gebruiker op naam en overschrijft de profielvelden, slaat de
|
||||
* configuratie op en logt de wijziging.
|
||||
*
|
||||
* @since 2.6.4
|
||||
* @since 2.6.5
|
||||
*
|
||||
* @param string $username Gebruikersnaam.
|
||||
* @param string $email E-mailadres. Default ''.
|
||||
@@ -660,7 +660,7 @@ class AdminAuth
|
||||
* moet een bekende sleutel uit ROLE_PERMISSIONS zijn. Wijzigingen worden
|
||||
* opgeslagen en gelogd.
|
||||
*
|
||||
* @since 2.6.4
|
||||
* @since 2.6.5
|
||||
*
|
||||
* @param string $username Gebruikersnaam.
|
||||
* @param string $role Nieuwe rol-sleutel.
|
||||
@@ -691,7 +691,7 @@ class AdminAuth
|
||||
* Een gebruiker kan zichzelf niet verwijderen. De gebruikerslijst wordt
|
||||
* gefilterd, opgeslagen en de actie gelogd.
|
||||
*
|
||||
* @since 2.6.4
|
||||
* @since 2.6.5
|
||||
*
|
||||
* @param string $username Gebruikersnaam.
|
||||
* @return array Resultaat met keys 'success' (bool) en 'message' (string).
|
||||
@@ -717,7 +717,7 @@ class AdminAuth
|
||||
* Controleert de minimum wachtwoordlengte (8), hasht het wachtwoord met de
|
||||
* standaard PHP-hash en slaat de wijziging op.
|
||||
*
|
||||
* @since 2.6.4
|
||||
* @since 2.6.5
|
||||
*
|
||||
* @param string $username Gebruikersnaam.
|
||||
* @param string $newPassword Nieuw wachtwoord (plaintext, minimaal 8 tekens).
|
||||
@@ -745,7 +745,7 @@ class AdminAuth
|
||||
* Verifieert eerst het huidige wachtwoord tegen de opgeslagen hash, controleert
|
||||
* de lengte van het nieuwe wachtwoord (minimaal 8) en slaat de nieuwe hash op.
|
||||
*
|
||||
* @since 2.6.4
|
||||
* @since 2.6.5
|
||||
*
|
||||
* @param string $username Gebruikersnaam.
|
||||
* @param string $currentPassword Huidig wachtwoord (plaintext).
|
||||
@@ -780,7 +780,7 @@ class AdminAuth
|
||||
/**
|
||||
* Zoekt een gebruiker op gebruikersnaam in de admin-configuratie.
|
||||
*
|
||||
* @since 2.6.4
|
||||
* @since 2.6.5
|
||||
*
|
||||
* @param string $username Gebruikersnaam.
|
||||
* @return array|null Gebruikersdata als array, of null indien niet gevonden.
|
||||
@@ -802,7 +802,7 @@ class AdminAuth
|
||||
* laatste poging met de geconfigureerde limieten. Verloopt de lockout dan
|
||||
* worden de pogingen gewist.
|
||||
*
|
||||
* @since 2.6.4
|
||||
* @since 2.6.5
|
||||
*
|
||||
* @param string $username Gebruikersnaam.
|
||||
* @return array Resultaat met keys 'locked' (bool) en optioneel 'remaining' (int, seconden).
|
||||
@@ -836,7 +836,7 @@ class AdminAuth
|
||||
* Verhoogt de teller en actualiseert de timestamp van de laatste poging,
|
||||
* waarna de gegevens worden weggeschreven naar het lockout-bestand.
|
||||
*
|
||||
* @since 2.6.4
|
||||
* @since 2.6.5
|
||||
*
|
||||
* @param string $username Gebruikersnaam.
|
||||
* @return void
|
||||
@@ -857,7 +857,7 @@ class AdminAuth
|
||||
*
|
||||
* Verwijdert de gebruiker uit het lockout-bestand en slaat dit op.
|
||||
*
|
||||
* @since 2.6.4
|
||||
* @since 2.6.5
|
||||
*
|
||||
* @param string $username Gebruikersnaam.
|
||||
* @return void
|
||||
@@ -875,7 +875,7 @@ class AdminAuth
|
||||
* Wrapper rond clearFailedAttempts die ook van buiten de class kan worden
|
||||
* aangeroepen, bijvoorbeeld door een CLI-tool voor het resetten van vergrendelingen.
|
||||
*
|
||||
* @since 2.6.4
|
||||
* @since 2.6.5
|
||||
*
|
||||
* @param string $username Gebruikersnaam.
|
||||
* @return void
|
||||
@@ -888,7 +888,7 @@ class AdminAuth
|
||||
/**
|
||||
* Leest alle mislukte inlogpogingen uit het lockout-bestand.
|
||||
*
|
||||
* @since 2.6.4
|
||||
* @since 2.6.5
|
||||
*
|
||||
* @return array<string, array{count: int, last_attempt: int}> Map van gebruikersnaam naar poging-data.
|
||||
*/
|
||||
@@ -907,7 +907,7 @@ class AdminAuth
|
||||
* Maakt de logdirectory aan indien nodig. Het IP-adres wordt via RequestLogger
|
||||
* bepaald indien beschikbaar, anders via REMOTE_ADDR met een fallback.
|
||||
*
|
||||
* @since 2.6.4
|
||||
* @since 2.6.5
|
||||
*
|
||||
* @param string $level Log-niveau (bijv. 'info', 'warning').
|
||||
* @param string $message Bericht dat gelogd moet worden.
|
||||
|
||||
Reference in New Issue
Block a user