phemios_core/
enrichment.rs1use serde_json::{Value, json};
3pub fn attach_service_keys(body: &mut Value, keys: &Value, status: &Value) -> Result<(), String> {
5 let request = body
6 .as_object_mut()
7 .ok_or("Demande d’enrichissement invalide.")?;
8 if request.contains_key("service_keys") {
9 return Err("Les clés des sources externes restent dans la configuration native.".into());
10 }
11 let mut shared = json!({});
12 for (stored, wire) in [("fanart", "fanarttv"), ("acoustid", "acoustid")] {
13 if let Some(value) = keys.get(stored) {
14 let key = value.as_str().ok_or("Clés invalides.")?;
15 if key.trim().is_empty() || key.len() > 1024 || key.chars().any(char::is_control) {
16 return Err("Clé API invalide.".into());
17 }
18 shared[wire] = key.into();
19 }
20 }
21 if shared.as_object().is_some_and(|object| !object.is_empty()) {
22 if !status["capabilities"]
23 .as_array()
24 .is_some_and(|rows| rows.iter().any(|row| row == "fetch_service_keys"))
25 {
26 return Err(
27 "Mettez à jour puis redémarrez Aède pour utiliser les clés communes.".into(),
28 );
29 }
30 request.insert("service_keys".into(), shared);
31 }
32 Ok(())
33}
34#[cfg(test)]
35#[path = "enrichment_tests.rs"]
36mod tests;