[FIX] simulate-nis2: rate limit reset + login retry in ensureUser

- autoResetDemo(): cancella tutti i file /tmp/nis2_ratelimit/*.json
  all'avvio così la re-esecuzione immediata non incappa in "Troppi tentativi"
- ensureUser(): aggiunge retry login se register fallisce con "email già
  registrata" (caso in cui dbSeedUser ha inserito l'utente ma il primo
  login aveva avuto un errore transitorio)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
DevEnv nis2-agile 2026-03-10 10:37:57 +01:00
parent 459d2bc8cd
commit 0a3f2d15e2

View File

@ -260,6 +260,19 @@ function ensureUser(string $firstName, string $lastName, string $email, string $
return $jwt;
}
// Ultimo tentativo: se register fallisce per "email già registrata" (utente inserito da
// dbSeedUser ma login aveva fallito per motivo transitorio), riprova il login.
$regMsg = strtolower($regRes['message'] ?? '');
if (str_contains($regMsg, 'registrat') || str_contains($regMsg, 'esiste') || $regRes['_http'] === 409) {
$retryLogin = api('POST', '/auth/login', ['email' => $email, 'password' => $password]);
if (!empty($retryLogin['data']['access_token'])) {
$jwt = $retryLogin['data']['access_token'];
$S['users'][$email] = ['jwt' => $jwt, 'id' => $retryLogin['data']['user']['id'] ?? null];
ok("Login (retry): $email");
return $jwt;
}
}
fail("Registrazione fallita per $email: " . ($regRes['message'] ?? 'errore'));
return null;
}
@ -697,9 +710,18 @@ function autoResetDemo(): void
$pdo->exec('SET FOREIGN_KEY_CHECKS=1');
// Pulisce i file rate limit (register + login) per permettere re-esecuzione immediata
$rateDir = '/tmp/nis2_ratelimit/';
$cleared = 0;
if (is_dir($rateDir)) {
foreach (glob($rateDir . '*.json') ?: [] as $f) {
if (@unlink($f)) $cleared++;
}
}
// Verifica org rimaste
$orgCount = $pdo->query('SELECT COUNT(*) FROM organizations')->fetchColumn();
simLog("Auto-reset completato — {$deleted} record rimossi, {$orgCount} org base mantenute", 'ok');
simLog("Auto-reset completato — {$deleted} record rimossi, {$orgCount} org base mantenute" . ($cleared ? ", {$cleared} rate-limit file rimossi" : ''), 'ok');
}
// ────────────────────────────────────────────────────────────────────────────