feat(api) : gérer les clés de l'API externe depuis Paramètres (#570)

Nouvel onglet Paramètres > API externe (admin) : état de l'API, adresse,
création d'une clé nommée par outil (affichée une seule fois), liste avec
dernière utilisation, révocation immédiate.

- table external_api_keys (empreinte SHA-256 uniquement), créée par
  migrations.production.ts et init.sql
- l'API accepte les clés de Paramètres et toujours celles de
  EXTERNAL_API_KEYS ; 503 seulement si aucune clé active
- routes /api/external-api/keys (session + admin)
- documentation et .env.example mis à jour

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JrRFddV2BaqDCxGY1j52UJ
This commit is contained in:
LogiFlowandClaude Opus 5.5 authored and GitHub committed 2026-10-10 09:53:41 +02:00
1 parent b964e137bf
commit 6760f43e87
11 files changed
+576 -19

No files matched your search

+4 -1
View File
@@ -5,7 +5,7 @@ import { setupLocalAuth, requireAuth } from "./localAuth";
import { requireModulePermission, requireAdmin, requirePermission } from "./permissions";
import { stripSmtpPassword } from "./sanitize";
import { normalizeDateString } from "./dateUtils";
import { registerExternalApi } from "./externalApi";
import { registerExternalApi, registerExternalApiKeyAdminRoutes } from "./externalApi";
// Corps de requête sans les champs secrets : pour les logs uniquement
function redactBody(body: any): any {
@@ -126,6 +126,9 @@ export async function registerRoutes(app: Express): Promise<Server> {
// Auth middleware
await setupAuth(app);
// Clés de l'API externe (Paramètres > API externe), admin uniquement
registerExternalApiKeyAdminRoutes(app, [isAuthenticated, requireAdmin]);
// Routes pour configuration webhook BAP
app.get('/api/webhook-bap-config', isAuthenticated, async (req: any, res) => {
try {