[FIX] ServicesController + simulate-nis2: adatta a schema users reale (full_name, is_active)

- ServicesController::provision(): INSERT users usa full_name/is_active (non first_name/last_name/status)
- ServicesController::ssoLogin(): stesso fix per SSO user creation
- simulate-nis2::ensureUser(): registration payload usa full_name (non first_name+last_name)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
DevEnv nis2-agile 2026-03-09 09:09:07 +01:00
parent eddc2fe79d
commit d51c365e46
2 changed files with 18 additions and 23 deletions

View File

@ -325,14 +325,10 @@ class ServicesController extends BaseController
if (!$user) { if (!$user) {
// Crea utente SSO (senza password — accede solo via token) // Crea utente SSO (senza password — accede solo via token)
$parts = explode(' ', $name, 2);
$firstName = $parts[0] ?? $email;
$lastName = $parts[1] ?? '';
Database::query( Database::query(
'INSERT INTO users (email, password_hash, first_name, last_name, role, status) 'INSERT INTO users (email, password_hash, full_name, role, is_active)
VALUES (?, ?, ?, ?, ?, "active")', VALUES (?, ?, ?, ?, 1)',
[$email, '', $firstName, $lastName, $role] [$email, '', $name ?: $email, $role]
); );
$userId = (int) Database::lastInsertId(); $userId = (int) Database::lastInsertId();
} else { } else {
@ -525,13 +521,14 @@ class ServicesController extends BaseController
$ragioneSociale = trim($company['ragione_sociale'] ?? ''); $ragioneSociale = trim($company['ragione_sociale'] ?? '');
$partitaIva = preg_replace('/[^0-9]/', '', $company['partita_iva'] ?? ''); $partitaIva = preg_replace('/[^0-9]/', '', $company['partita_iva'] ?? '');
$adminEmail = trim($admin['email'] ?? ''); $adminEmail = trim($admin['email'] ?? '');
$adminFirst = trim($admin['first_name'] ?? ''); // Supporta sia full_name che first_name+last_name
$adminLast = trim($admin['last_name'] ?? ''); $adminFullName = trim($admin['full_name']
?? trim(($admin['first_name'] ?? '') . ' ' . ($admin['last_name'] ?? '')));
if (!$ragioneSociale) $this->jsonError('company.ragione_sociale obbligatorio', 400, 'MISSING_FIELD'); if (!$ragioneSociale) $this->jsonError('company.ragione_sociale obbligatorio', 400, 'MISSING_FIELD');
if (strlen($partitaIva) !== 11) $this->jsonError('company.partita_iva non valida (11 cifre)', 400, 'INVALID_VAT'); if (strlen($partitaIva) !== 11) $this->jsonError('company.partita_iva non valida (11 cifre)', 400, 'INVALID_VAT');
if (!filter_var($adminEmail, FILTER_VALIDATE_EMAIL)) $this->jsonError('admin.email non valida', 400, 'INVALID_EMAIL'); if (!filter_var($adminEmail, FILTER_VALIDATE_EMAIL)) $this->jsonError('admin.email non valida', 400, 'INVALID_EMAIL');
if (!$adminFirst || !$adminLast) $this->jsonError('admin.first_name e last_name obbligatori', 400, 'MISSING_FIELD'); if (!$adminFullName) $this->jsonError('admin.full_name obbligatorio', 400, 'MISSING_FIELD');
$db = Database::getInstance(); $db = Database::getInstance();
@ -603,10 +600,10 @@ class ServicesController extends BaseController
$userId = (int) $existingUser['id']; $userId = (int) $existingUser['id'];
} else { } else {
Database::query( Database::query(
'INSERT INTO users (email, password_hash, first_name, last_name, role, status, 'INSERT INTO users (email, password_hash, full_name, role, is_active,
phone, job_title, must_change_password) phone, job_title, must_change_password)
VALUES (?,?,?,?,\'super_admin\',\'active\',?,?,1)', VALUES (?,?,?,\'org_admin\',1,?,?,1)',
[$adminEmail, $passwordHash, $adminFirst, $adminLast, [$adminEmail, $passwordHash, $adminFullName,
$admin['phone'] ?? null, $admin['title'] ?? null] $admin['phone'] ?? null, $admin['title'] ?? null]
); );
$userId = (int) Database::lastInsertId(); $userId = (int) Database::lastInsertId();

View File

@ -196,16 +196,14 @@ function ensureUser(string $firstName, string $lastName, string $email, string $
// Registrazione // Registrazione
$regRes = api('POST', '/auth/register', [ $regRes = api('POST', '/auth/register', [
'first_name' => $firstName, 'full_name' => trim("$firstName $lastName"),
'last_name' => $lastName,
'email' => DEMO_EMAIL !== $email ? DEMO_EMAIL : $email, 'email' => DEMO_EMAIL !== $email ? DEMO_EMAIL : $email,
'password' => $password, 'password' => $password,
'role' => $role, 'role' => $role,
]); ]);
// Override email per demo (sempre DEMO_EMAIL ma tracking per slug) // Override email per demo (sempre DEMO_EMAIL ma tracking per slug)
$regRes2 = api('POST', '/auth/register', [ $regRes2 = api('POST', '/auth/register', [
'first_name' => $firstName, 'full_name' => trim("$firstName $lastName"),
'last_name' => $lastName,
'email' => $email, 'email' => $email,
'password' => $password, 'password' => $password,
'role' => $role, 'role' => $role,