Saltar al contenido
MCP ThesaurusMCP Thesaurus

BLOCKTRUST TrustScan

ComunidadIncomplete39/100Reclamar

streamable-httpupdated 2mo ago

Plateforme de certification et vérification d'authenticité pour les entreprises Stack: Next.js 16, Prisma, PostgreSQL, JWT (ES256), QR Codes

CĂłdigoWeb

¿Qué puedes hacer con BLOCKTRUST TrustScan?

BlockTrust MVP

Plateforme de certification et vérification d'authenticité pour les entreprises
Stack: Next.js 16, Prisma, PostgreSQL, JWT (ES256), QR Codes

Déploiement & Neon (bold-frost / vercel-dev) : voir DEPLOYMENT.md.


🎯 Vue d'ensemble

BlockTrust est une plateforme permettant aux entreprises de :

  • CrĂ©er et gĂ©rer des certificats de confiance
  • GĂ©nĂ©rer des signatures JWT pour authentifier leurs emails
  • VĂ©rifier l'authenticitĂ© des communications via des badges et QR codes
  • Suivre les vĂ©rifications et dĂ©tecter les tentatives de falsification

🚀 Technologies

  • Framework: Next.js 16.1.1 (App Router)
  • Base de donnĂ©es: PostgreSQL avec Prisma ORM
  • Authentification: JWT avec ES256 (clĂ©s ECDSA)
  • UI: React 19, Tailwind CSS 4
  • QR Codes: BibliothĂšque qrcode

📁 Structure du projet

blocktrust-mvp/
├── app/
│   ├── api/
│   │   ├── entities/
│   │   │   └── route.ts          # CRUD des entitĂ©s
│   │   └── v2/
│   │       ├── issue/
│   │       │   └── route.ts      # GĂ©nĂ©ration de signatures JWT
│   │       └── verify/
│   │           └── route.ts      # VĂ©rification de signatures
│   ├── badge/
│   │   └── [id]/
│   │       └── page.tsx          # Page badge avec QR code
│   ├── components/
│   │   └── QRCode.tsx            # Composant QR code
│   ├── dashboard/
│   │   ├── create/
│   │   │   └── page.tsx          # Formulaire crĂ©ation entitĂ©
│   │   └── page.tsx              # Dashboard principal
│   ├── verify/
│   │   ├── [id]/
│   │   │   └── page.tsx          # VĂ©rification par ID/SIRET
│   │   └── page.tsx              # VĂ©rification par token JWT
│   ├── lib/
│   │   └── db.ts                 # Client Prisma
│   └── page.tsx                  # Page d'accueil
├── lib/
│   └── v2/
│       ├── context.ts            # Canonicalisation et hash des contextes
│       └── jwt.ts                # Signatures et vĂ©rification JWT
├── prisma/
│   ├── schema.prisma             # SchĂ©ma de base de donnĂ©es
│   ├── migrations/               # Migrations Prisma
│   └── seed.js                   # Script de seed
└── README.md

đŸ—„ïž ModĂšle de donnĂ©es

User

  • Informations utilisateur (email, nom, plan)

Entity

  • EntitĂ© certifiĂ©e (nom lĂ©gal, SIRET, email, site web)
  • Statuts: kycStatus (PENDING/APPROVED/REJECTED)
  • Niveaux: validationLevel (BRONZE/SILVER/GOLD)

Certificate

  • Certificat liĂ© Ă  une entitĂ©
  • Statuts: PENDING/APPROVED/REJECTED
  • Niveaux: BRONZE/SILVER/GOLD

Signature (V2)

  • MĂ©tadonnĂ©es de signature JWT
  • jti: Identifiant unique du token
  • ctxHash: Hash du contexte signĂ©
  • expiresAt: Date d'expiration
  • revoked: Statut de rĂ©vocation

VerificationEvent

  • Historique des vĂ©rifications
  • IP, User-Agent, verdict (VALID/TAMPERED/REVOKED/etc.)

🔐 API V2 - Signatures JWT

POST /api/v2/issue

GénÚre une signature JWT pour un contexte email.

Request:

{
  "entityId": "string",
  "certificateId": "string",
  "context": {
    "from": "contact@example.com",
    "to": "client@example.com",
    "subject": "Sujet de l'email",
    "date": "2024-01-15T10:00:00Z",
    "body": "Corps de l'email (optionnel)"
  },
  "expiresInSeconds": 3600
}

Response:

{
  "token": "eyJ...",
  "verifyUrl": "http://localhost:3000/verify?token=...",
  "signatureId": "uuid"
}

POST /api/v2/verify

Vérifie une signature JWT.

Request:

{
  "token": "eyJ...",
  "context": {
    "from": "contact@example.com",
    "to": "client@example.com",
    "subject": "Sujet de l'email",
    "date": "2024-01-15T10:00:00Z",
    "body": "Corps de l'email (optionnel)"
  }
}

Response:

{
  "verdict": "VALID" | "VALID_WITH_WARNING" | "TAMPERED" | "REVOKED" | "EXPIRED" | "INVALID",
  "reason": "string (optionnel)",
  "entityId": "string",
  "certificateId": "string",
  "jti": "string"
}

đŸ› ïž Installation et configuration

Prérequis

  • Node.js 20+
  • PostgreSQL
  • macOS (ou Linux/Windows)

1. Installation des dépendances

npm install

2. Configuration de la base de données

Créer un fichier .env à la racine :

# Base de données
DATABASE_URL="postgresql://user:password@localhost:5432/blocktrust"
DIRECT_URL="postgresql://user:password@localhost:5432/blocktrust"

# JWT (clés ECDSA ES256)
BLOCKTRUST_JWT_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----"
BLOCKTRUST_JWT_PUBLIC_KEY="-----BEGIN PUBLIC KEY-----\n...\n-----END PUBLIC KEY-----"

# Application
NEXT_PUBLIC_APP_URL="http://localhost:3000"

3. Génération des clés JWT (ES256)

# Générer une paire de clés ECDSA
openssl ecparam -genkey -name prime256v1 -noout -out private-key.pem
openssl ec -in private-key.pem -pubout -out public-key.pem

# Convertir en format PKCS8 pour la clé privée
openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in private-key.pem -out private-key-pkcs8.pem

Copier le contenu de private-key-pkcs8.pem dans BLOCKTRUST_JWT_PRIVATE_KEY et public-key.pem dans BLOCKTRUST_JWT_PUBLIC_KEY (avec \n pour les retours Ă  la ligne).

4. Initialisation de la base de données

# Générer le client Prisma
npx prisma generate

# Appliquer les migrations
npx prisma migrate deploy

# (Optionnel) Seed la base de données
npm run seed

5. Lancement du serveur de développement

npm run dev

L'application sera accessible sur http://localhost:3000

📝 Scripts disponibles

  • npm run dev - Lance le serveur de dĂ©veloppement
  • npm run build - Build de production
  • npm run start - Lance le serveur de production
  • npm run lint - VĂ©rifie le code avec ESLint
  • npm run seed - Seed la base de donnĂ©es avec des donnĂ©es de dĂ©mo

🎹 FonctionnalitĂ©s implĂ©mentĂ©es

✅ Dashboard

  • Affichage des entitĂ©s et certificats
  • Statistiques (certificats actifs, vĂ©rifications)
  • Navigation vers crĂ©ation, vĂ©rification, badges

✅ CrĂ©ation d'entitĂ©s

  • Formulaire de crĂ©ation avec validation
  • CrĂ©ation automatique d'un certificat associĂ©
  • Gestion des erreurs (SIRET unique)

✅ Badges et QR codes

  • GĂ©nĂ©ration de badges visuels
  • QR codes pour vĂ©rification rapide
  • Affichage des informations de certification

✅ VĂ©rification

  • VĂ©rification par ID/SIRET (page publique)
  • VĂ©rification par token JWT (API V2)
  • DĂ©tection de falsification (hash mismatch)
  • DĂ©tection de replay (changement IP/UA)
  • Gestion de l'expiration et rĂ©vocation

✅ API V2 - Signatures JWT

  • GĂ©nĂ©ration de tokens signĂ©s avec ES256
  • Canonicalisation des contextes email
  • VĂ©rification cryptographique
  • Historique des vĂ©rifications

🔒 SĂ©curitĂ©

  • JWT ES256: Signatures cryptographiques avec clĂ©s ECDSA
  • Hash de contexte: Protection contre la falsification
  • Anti-replay: DĂ©tection des vĂ©rifications suspectes
  • Expiration: Tokens avec durĂ©e de vie limitĂ©e
  • RĂ©vocation: Support de la rĂ©vocation de signatures

🚧 Prochaines Ă©tapes

  • Authentification utilisateur (Supabase Auth ou NextAuth)
  • IntĂ©gration email (plugin/extension)
  • SystĂšme de paiement (Stripe)
  • API REST complĂšte
  • Tests unitaires et d'intĂ©gration
  • Documentation API (OpenAPI/Swagger)
  • Dashboard admin
  • Export de donnĂ©es
  • Notifications email

📄 Licence

Propriétaire - Tous droits réservés


DĂ©veloppĂ© avec ❀ pour BlockTrust

force rebuild