Scaffold per sostituire il modulo whistleblowing interno (plaintext) con Vocea (nexus-whistleblowing-ms), prodotto zero-knowledge della suite. Modalita C (integrazione verticale, nessuna crypto re-implementata). DORMIENTE: VOCEA_ENABLED =false di default -> zero impatto sul modulo legacy. - docs/sql/063_vocea_channel.sql + application/cli/migrate_063_vocea_channel.php (idempotente): organizations += vocea_tenant_slug/channel_status/enrolled_at. NON ancora applicata al DB. - application/services/VoceaService.php (nuovo): client API integratori (X-API-Key su api.vocea.cloud) per submit/status/reports/keyholders + portalUrl (embed wb-link.js). Guard enabled()/isEnabledForOrg(): se OFF/non provisioned ritorna DISABLED/NOT_PROVISIONED senza chiamate di rete. - config.php: costanti VOCEA_ENABLED/BASE_URL/API_KEY/PORTAL_URL (default off). - WhistleblowingController: branch dormiente in list() (delega a Vocea se attivo) + endpoint GET channelStatus + helper voceaOrg/listViaVocea. Modulo legacy invariato. - public/index.php: route GET:channelStatus. - docs handoff: richiesta a VIGILE (OUTGOING) + risposta VIGILE (INCOMING). Attivazione a MS live: applicare migrate_063 + VOCEA_ENABLED=true + VOCEA_API_KEY (vault tier1__nis2-agile__vocea__*) + slug canale su organizations. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
15 lines
842 B
SQL
15 lines
842 B
SQL
-- 063_vocea_channel.sql — Integrazione Vocea (whistleblowing zero-knowledge).
|
|
-- Mappa ogni organization NIS2 al proprio canale Vocea (tenant). ADDITIVA, non distruttiva.
|
|
-- Apply autoritativo IDEMPOTENTE: application/cli/migrate_063_vocea_channel.php
|
|
-- (MySQL non supporta ADD COLUMN IF NOT EXISTS → l'apply controlla information_schema).
|
|
-- SCAFFOLD DORMIENTE: nessun effetto funzionale finché VOCEA_ENABLED=false (default).
|
|
|
|
ALTER TABLE organizations
|
|
ADD COLUMN vocea_tenant_slug VARCHAR(64) NULL COMMENT 'Slug del canale Vocea associato (NULL = nessun canale)';
|
|
|
|
ALTER TABLE organizations
|
|
ADD COLUMN vocea_channel_status ENUM('none','provisioning','active','suspended') NOT NULL DEFAULT 'none';
|
|
|
|
ALTER TABLE organizations
|
|
ADD COLUMN vocea_enrolled_at TIMESTAMP NULL COMMENT 'Quando canale + key holder sono stati enrollati';
|