use actix_web::{web, HttpResponse};
use chrono::{SecondsFormat, Utc};
use crate::{
app_state::{AppState, ConfigUpdateEffects},
error::AppError,
};
mod status;
mod updates;
#[cfg(test)]
mod tests;
pub async fn get_setup_status(app_state: web::Data<AppState>) -> Result<HttpResponse, AppError> {
let config = app_state.config.read().await.clone();
let proxy_environment_flags = status::collect_proxy_environment_flags();
let setup_status = status::build_setup_status(&config, &proxy_environment_flags);
Ok(HttpResponse::Ok().json(setup_status))
}
pub async fn mark_setup_complete(app_state: web::Data<AppState>) -> Result<HttpResponse, AppError> {
let completed_at = Utc::now().to_rfc3339_opts(SecondsFormat::Secs, true);
app_state
.update_config(
|config| updates::set_setup_complete(config, completed_at.clone()),
ConfigUpdateEffects::default(),
)
.await?;
Ok(HttpResponse::Ok().json(serde_json::json!({ "success": true })))
}
pub async fn mark_setup_incomplete(
app_state: web::Data<AppState>,
) -> Result<HttpResponse, AppError> {
let reset_at = Utc::now().to_rfc3339_opts(SecondsFormat::Secs, true);
app_state
.update_config(
|config| {
updates::set_setup_incomplete(config, reset_at.clone());
Ok(())
},
ConfigUpdateEffects::default(),
)
.await?;
Ok(HttpResponse::Ok().json(serde_json::json!({ "success": true })))
}