- Page publique /verify/[id] affichant Odentas Seal, TSA, certificat - API /api/signatures/create-verification pour créer preuves - Générateur PDF de preuve avec QR code (jsPDF) - Hook useSignatureProof() pour intégration facile - Table Supabase signature_verifications avec RLS public - Page de test /test-signature-verification - Documentation complète du système Les signataires peuvent scanner le QR code ou visiter l'URL pour vérifier l'authenticité et l'intégrité de leur document signé.
74 lines
2.3 KiB
SQL
74 lines
2.3 KiB
SQL
-- Table pour stocker les preuves de signature vérifiables publiquement
|
|
CREATE TABLE IF NOT EXISTS signature_verifications (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
|
|
-- Informations du document
|
|
document_name TEXT NOT NULL,
|
|
pdf_url TEXT NOT NULL,
|
|
signed_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
|
|
-- Informations du signataire
|
|
signer_name TEXT NOT NULL,
|
|
signer_email TEXT NOT NULL,
|
|
|
|
-- Données cryptographiques
|
|
signature_hash TEXT NOT NULL, -- Hash SHA-256 du contenu signé
|
|
signature_hex TEXT NOT NULL, -- Signature complète en hexadécimal
|
|
|
|
-- Certificat
|
|
certificate_info JSONB NOT NULL DEFAULT '{
|
|
"issuer": "",
|
|
"subject": "",
|
|
"valid_from": "",
|
|
"valid_until": "",
|
|
"serial_number": ""
|
|
}'::jsonb,
|
|
|
|
-- Horodatage (TSA)
|
|
timestamp JSONB NOT NULL DEFAULT '{
|
|
"tsa_url": "",
|
|
"timestamp": "",
|
|
"hash": ""
|
|
}'::jsonb,
|
|
|
|
-- Statuts de vérification
|
|
verification_status JSONB NOT NULL DEFAULT '{
|
|
"seal_valid": true,
|
|
"timestamp_valid": true,
|
|
"document_intact": true
|
|
}'::jsonb,
|
|
|
|
-- Métadonnées
|
|
contract_id UUID REFERENCES contracts(id) ON DELETE SET NULL,
|
|
organization_id UUID REFERENCES organizations(id) ON DELETE CASCADE,
|
|
|
|
created_at TIMESTAMPTZ DEFAULT NOW(),
|
|
updated_at TIMESTAMPTZ DEFAULT NOW()
|
|
);
|
|
|
|
-- Index pour recherche rapide
|
|
CREATE INDEX idx_signature_verifications_id ON signature_verifications(id);
|
|
CREATE INDEX idx_signature_verifications_contract ON signature_verifications(contract_id);
|
|
CREATE INDEX idx_signature_verifications_org ON signature_verifications(organization_id);
|
|
|
|
-- RLS: Les pages de vérification sont publiques
|
|
ALTER TABLE signature_verifications ENABLE ROW LEVEL SECURITY;
|
|
|
|
-- Politique publique en lecture (n'importe qui peut vérifier une signature)
|
|
CREATE POLICY "Vérifications publiques" ON signature_verifications
|
|
FOR SELECT
|
|
USING (true);
|
|
|
|
-- Seul le système peut créer/modifier
|
|
CREATE POLICY "Système peut gérer" ON signature_verifications
|
|
FOR ALL
|
|
USING (auth.uid() IS NOT NULL)
|
|
WITH CHECK (auth.uid() IS NOT NULL);
|
|
|
|
-- Trigger de mise à jour
|
|
CREATE TRIGGER update_signature_verifications_updated_at
|
|
BEFORE UPDATE ON signature_verifications
|
|
FOR EACH ROW
|
|
EXECUTE FUNCTION update_updated_at_column();
|
|
|
|
COMMENT ON TABLE signature_verifications IS 'Preuves de signature électronique vérifiables publiquement via URL/QR code';
|