Files
CollectFlow/server/src/admin/qlik_bridge.rs
T
Claude 4142e7c73e 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
2026-10-17 12:44:28 +00:00

38 lines
1.8 KiB
Rust

//! Points d'appel vers les modules `qlik` et `ff` utilisés par les Paramètres.
//! Branchés après l'intégration de ces modules.
use serde_json::Value;
/// Ouvre une session Qlik (NTLM → ticket → cookie) avec les identifiants donnés.
pub async fn tester_session(host: String, user: String, password: Option<String>) -> anyhow::Result<()> {
let enregistre = crate::qlik::client::get_qlik_config();
let mut cfg = enregistre.clone();
cfg.user = user;
cfg.password = password.unwrap_or(enregistre.password);
if !host.is_empty() {
cfg.host = host;
}
crate::qlik::client::qlik_ntlm_session(&cfg).await?;
Ok(())
}
/// Oublie l'URL mémorisée de l'API FF Nancy.
pub fn reset_ff_api_base() {
crate::ff::api::reset_ff_api_base_cache();
}
/// Diagnostic de l'API FF Nancy.
pub async fn diagnostiquer_api_ff(base: Option<String>, cle: Option<String>) -> Value {
serde_json::to_value(crate::ff::diagnostic::diagnostiquer_api_ff(base, cle).await).unwrap_or(Value::Null)
}
/// Extraction Qlik d'un fournisseur sur la fenêtre de la synchro (`QLIK_SYNC_MONTHS_BACK`),
/// puis enregistrement dans le cache réseau. Renvoie le nombre de codes enregistrés.
pub async fn extraire_et_enregistrer(codes: Vec<String>, fournisseur: &str) -> anyhow::Result<usize> {
use crate::qlik::date_range::{build_grid_network_qlik_date_filter_now, env_months_back, QLIK_MONTHS_BACK_DEFAULT};
let filtre = build_grid_network_qlik_date_filter_now(env_months_back("QLIK_SYNC_MONTHS_BACK", QLIK_MONTHS_BACK_DEFAULT));
let metrics = crate::qlik::fetch_network_metrics_playwright(Some(codes), None, Some(filtre), Some(fournisseur.to_string())).await?;
let liste: Vec<_> = metrics.into_values().collect();
crate::qlik::upsert_network_metrics(&liste).await
}