use crate::{
app_state::{AppState, ConfigUpdateEffects},
error::AppError,
};
use actix_web::{web, HttpResponse};
use super::types::ProxyAuthPayload;
pub async fn set_proxy_auth(
app_state: web::Data<AppState>,
payload: web::Json<ProxyAuthPayload>,
) -> Result<HttpResponse, AppError> {
let auth = payload.into_inner().into_proxy_auth();
app_state
.update_config(
move |config| {
config.proxy_auth = auth;
config.refresh_proxy_auth_encrypted().map_err(|e| {
AppError::InternalError(anyhow::anyhow!(
"Failed to encrypt proxy auth before save: {e}"
))
})?;
Ok(())
},
ConfigUpdateEffects {
reload_provider: false,
reconcile_mcp: true,
},
)
.await?;
if let Err(e) = app_state.reload_provider().await {
tracing::warn!("Proxy auth updated but provider reload failed: {}", e);
}
Ok(HttpResponse::Ok().json(serde_json::json!({ "success": true })))
}
pub async fn get_proxy_auth_status(
app_state: web::Data<AppState>,
) -> Result<HttpResponse, AppError> {
let mut config = app_state.config.write().await;
config.hydrate_proxy_auth_from_encrypted();
if let Some(auth) = config.proxy_auth.as_ref() {
return Ok(HttpResponse::Ok().json(serde_json::json!({
"configured": true,
"username": auth.username,
})));
}
Ok(HttpResponse::Ok().json(serde_json::json!({
"configured": false,
"username": serde_json::Value::Null
})))
}