Paramètres : clé d'API FF Nancy (en-tête X-API-Key)

L'API api.ffnancy.fr exige désormais une clé (401 « Clé d'API requise »).
- Nouveau champ « Clé d'API » dans Paramètres → API FF Nancy, stocké dans
  data/.db-config.json (ffApiKey), jamais renvoyé au navigateur ; vide =
  conserver la clé enregistrée. Repli sur la variable FF_API_KEY.
- Tous les appels à l'API FF envoient l'en-tête X-API-Key (ff_get, proxy
  commandes-auto, publicités, /api/diag, test de connexion).
- Le test de connexion signale explicitement une clé manquante ou refusée.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KdY28Lq8Q8xX4RZsAvWRQ7
This commit is contained in:
Claude committed 2026-10-17 12:44:28 +00:00
1 parent 712174cd85
commit 4142e7c73e
11 files changed
+167 -59

No files matched your search

+14 -6
View File
@@ -32,6 +32,8 @@ export interface ParametresAffichables {
} | null;
qlik: { host: string; user: string; motDePasseEnregistre: boolean };
ffApiBaseUrl: string;
/** Une clé d'API FF est enregistrée (la clé elle-même ne quitte pas le serveur). */
ffApiKeyEnregistree: boolean;
}
export interface ResultatAction {
@@ -67,12 +69,18 @@ export async function testQlikConnection(qlikHost: string, qlikUser: string, qli
return callAction("testQlikConnection", [qlikHost, qlikUser, qlikPassword]);
}
/** Enregistre l'URL de l'API FF Nancy. Chaîne vide = revenir au défaut. */
export async function saveFfApiSettings(ffApiBaseUrl: string): Promise<ResultatAction> {
return callAction("saveFfApiSettings", [ffApiBaseUrl]);
/**
* Enregistre l'URL de l'API FF Nancy (chaîne vide = revenir au défaut) et sa clé
* d'API (vide ou absente : celle qui est enregistrée est conservée).
*/
export async function saveFfApiSettings(ffApiBaseUrl: string, ffApiKey?: string): Promise<ResultatAction> {
return callAction("saveFfApiSettings", [ffApiBaseUrl, ffApiKey]);
}
/** Teste l'API FF Nancy (diagnostic détaillé : DNS, refus, délai, code HTTP). */
export async function testFfApiConnection(ffApiBaseUrl?: string): Promise<DiagnosticApiFf> {
return callAction("testFfApiConnection", [ffApiBaseUrl]);
/**
* Teste l'API FF Nancy (diagnostic détaillé : DNS, refus, délai, code HTTP, clé).
* Clé vide ou absente : on teste avec celle qui est enregistrée.
*/
export async function testFfApiConnection(ffApiBaseUrl?: string, ffApiKey?: string): Promise<DiagnosticApiFf> {
return callAction("testFfApiConnection", [ffApiBaseUrl, ffApiKey]);
}