mirror of
https://github.com/R0m1k3/LogiFlow.git
synced 2026-10-16 11:46:21 +02:00
feat(api): gérer les clés de l'API externe depuis Paramètres
Les clés de l'API de rapprochement n'étaient configurables que par la variable d'environnement EXTERNAL_API_KEYS. Nouvel onglet Paramètres > API externe (admin) : - état de l'API, adresse à copier, rappel des principales routes - création d'une clé nommée par outil, affichée une seule fois - liste des clés avec préfixe, date de création et de dernière utilisation ; révocation immédiate, sans redémarrage Côté serveur : - table external_api_keys (empreinte SHA-256 uniquement), créée par migrations.production.ts et init.sql - server/externalApiKeys.ts : création, liste, révocation, vérification (repli en mémoire sans base) - 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:
11 files changed
+576
-19
No files matched your search
@@ -1023,6 +1023,21 @@ export const insertWebhookBapConfigSchema = createInsertSchema(webhookBapConfig)
|
||||
export type WebhookBapConfig = typeof webhookBapConfig.$inferSelect;
|
||||
export type InsertWebhookBapConfig = z.infer<typeof insertWebhookBapConfigSchema>;
|
||||
|
||||
// Clés de l'API externe de rapprochement (docs/API-RAPPROCHEMENT.md), créées
|
||||
// depuis Paramètres. Seule l'empreinte SHA-256 de la clé est stockée.
|
||||
export const externalApiKeys = pgTable("external_api_keys", {
|
||||
id: serial("id").primaryKey(),
|
||||
name: varchar("name", { length: 100 }).notNull(),
|
||||
keyPrefix: varchar("key_prefix", { length: 16 }).notNull(), // début de la clé, pour la reconnaître
|
||||
keyHash: varchar("key_hash", { length: 64 }).notNull().unique(),
|
||||
createdBy: varchar("created_by"),
|
||||
createdAt: timestamp("created_at").defaultNow(),
|
||||
lastUsedAt: timestamp("last_used_at"),
|
||||
revokedAt: timestamp("revoked_at"),
|
||||
});
|
||||
|
||||
export type ExternalApiKey = typeof externalApiKeys.$inferSelect;
|
||||
|
||||
// Supplier mail logs
|
||||
export const insertSupplierMailLogSchema = createInsertSchema(supplierMailLogs).omit({
|
||||
id: true,
|
||||
|
||||
Reference in new issue
Block a user