mirror of
https://github.com/R0m1k3/CollectFlow.git
synced 2026-10-18 12:46:32 +02:00
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
87 lines
3.2 KiB
TypeScript
87 lines
3.2 KiB
TypeScript
/**
|
|
* Actions des Paramètres — réservées aux administrateurs, exécutées par le
|
|
* serveur Rust : `POST /api/actions/{nom}`.
|
|
*
|
|
* Aucun secret ne repart vers le navigateur : les mots de passe (base, Qlik) et
|
|
* les clés d'IA restent dans `data/.db-config.json`. Un mot de passe laissé vide
|
|
* dans le formulaire signifie « conserver celui qui est enregistré ».
|
|
*/
|
|
|
|
import { callAction } from "@/lib/rpc";
|
|
import type { FfSyncStatus } from "@/types/ff";
|
|
|
|
export interface ChampsBaseDeDonnees {
|
|
host: string;
|
|
port: string;
|
|
database: string;
|
|
user: string;
|
|
/** Vide ou absent : le mot de passe enregistré est conservé. */
|
|
password?: string;
|
|
ssl: boolean;
|
|
}
|
|
|
|
/** Ce que le formulaire peut afficher : jamais de mot de passe ni de clé. */
|
|
export interface ParametresAffichables {
|
|
db: {
|
|
host: string;
|
|
port: string;
|
|
database: string;
|
|
user: string;
|
|
ssl: boolean;
|
|
motDePasseEnregistre: boolean;
|
|
} | 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 {
|
|
success: boolean;
|
|
error?: string;
|
|
}
|
|
|
|
/** Diagnostic de l'API FF Nancy (bouton « Tester »). */
|
|
export type DiagnosticApiFf =
|
|
| { success: true; url: string; ms: number; status: FfSyncStatus }
|
|
| { success: false; url: string; error: string };
|
|
|
|
/** Réglages enregistrés, sans aucun secret. */
|
|
export async function getParametresAffichables(): Promise<ParametresAffichables> {
|
|
return callAction("getParametresAffichables", []);
|
|
}
|
|
|
|
export async function testDatabaseConnection(champs: ChampsBaseDeDonnees): Promise<ResultatAction> {
|
|
return callAction("testDatabaseConnection", [champs]);
|
|
}
|
|
|
|
export async function saveDatabaseSettings(champs: ChampsBaseDeDonnees): Promise<ResultatAction> {
|
|
return callAction("saveDatabaseSettings", [champs]);
|
|
}
|
|
|
|
/** Mot de passe vide ou absent : celui qui est enregistré est conservé. */
|
|
export async function saveQlikSettings(qlikHost: string, qlikUser: string, qlikPassword?: string): Promise<ResultatAction> {
|
|
return callAction("saveQlikSettings", [qlikHost, qlikUser, qlikPassword]);
|
|
}
|
|
|
|
/** Mot de passe vide ou absent : on teste avec celui qui est enregistré. */
|
|
export async function testQlikConnection(qlikHost: string, qlikUser: string, qlikPassword?: string): Promise<ResultatAction> {
|
|
return callAction("testQlikConnection", [qlikHost, qlikUser, qlikPassword]);
|
|
}
|
|
|
|
/**
|
|
* 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, 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]);
|
|
}
|