[INVITE] Sistema inviti/licenze B2B + provisioning con invite_token

- InviteController: CRUD inviti (gen, list, show, revoke, rigenera, validate)
- Token inv_* sha256-hashed, one-shot o multi-use, canali, scadenza
- ServicesController::provision() accetta invite_token al posto di X-Provision-Secret
  Piano e durata forzati dall'invito, markUsed() chiaamto dopo provisioning riuscito
- index.php: routing /api/invites/* aggiunto (controller + action map)
- integrazioniext.html: nuovo tab "Inviti & Licenze" con flow completo, endpoints,
  esempi curl/php, guida lg231 aggiornata con sezione provisioning automatico

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
DevEnv nis2-agile
2026-03-07 15:22:25 +01:00
co-authored by Claude Sonnet 4.6
parent 6933e1d3fb
commit 612befd66d
5 changed files with 679 additions and 14 deletions
+12
View File
@@ -99,6 +99,7 @@ $controllerMap = [
'onboarding' => 'OnboardingController',
'ncr' => 'NonConformityController',
'services' => 'ServicesController',
'invites' => 'InviteController',
'webhooks' => 'WebhookController',
'whistleblowing'=> 'WhistleblowingController',
'normative' => 'NormativeController',
@@ -296,6 +297,17 @@ $actionMap = [
'POST:webhook' => 'webhook',
],
// ── InviteController (licenze/inviti B2B) ──────
'invites' => [
'POST:create' => 'create',
'GET:index' => 'index',
'GET:list' => 'index',
'GET:{id}' => 'show',
'DELETE:{id}' => 'revoke',
'POST:{id}/regenerate' => 'regenerate',
'GET:validate' => 'validate', // ?token=inv_...
],
// ── ServicesController (API pubblica) ──────────
'services' => [
'POST:provision' => 'provision',