diff --git a/crates/meilisearch/src/routes/settings/chat.rs b/crates/meilisearch/src/routes/settings/chat.rs index 42fb456b8..09d476008 100644 --- a/crates/meilisearch/src/routes/settings/chat.rs +++ b/crates/meilisearch/src/routes/settings/chat.rs @@ -24,10 +24,11 @@ async fn get_settings( Data, >, ) -> Result { - let settings = match index_scheduler.chat_settings()? { + let mut settings = match index_scheduler.chat_settings()? { Some(value) => serde_json::from_value(value).unwrap(), None => GlobalChatSettings::default(), }; + settings.hide_secrets(); Ok(HttpResponse::Ok().json(settings)) } @@ -80,6 +81,33 @@ pub struct GlobalChatSettings { pub prompts: Setting, } +impl GlobalChatSettings { + pub fn hide_secrets(&mut self) { + match &mut self.api_key { + Setting::Set(key) => Self::hide_secret(key), + Setting::Reset => (), + Setting::NotSet => (), + } + } + + fn hide_secret(secret: &mut String) { + match secret.len() { + x if x < 10 => { + secret.replace_range(.., "XXX..."); + } + x if x < 20 => { + secret.replace_range(2.., "XXXX..."); + } + x if x < 30 => { + secret.replace_range(3.., "XXXXX..."); + } + _x => { + secret.replace_range(5.., "XXXXXX..."); + } + } + } +} + #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(deny_unknown_fields, rename_all = "camelCase")] pub struct ChatPrompts {