This commit is contained in:
Mateusz Gruszczyński committed 2026-10-25 17:45:57 +01:00
1 parent bd077754a9
commit ed7e3377c1
40 files changed
+1764 -365

No files matched your search

-135
View File
@@ -1,138 +1,3 @@
async fn update_section(
State(state): State<Arc<App>>,
Extension(session): Extension<Session>,
Path(section): Path<String>,
Json(input): Json<SectionUpdate>,
) -> Result<Json<crate::config::Envelope>, ApiError> {
let current = state.config.load_full();
if current.envelope.revision != input.expected_revision {
return Err(ApiError(
StatusCode::CONFLICT,
"configuration changed; reload before saving".into(),
));
}
let mut config = current.envelope.config.clone();
let value = input.value;
match section.as_str() {
"listeners" => {
config.listeners =
serde_json::from_value(value).map_err(|e| invalid_section(&section, e))?
}
"docker-agents" => {
config.docker_agents =
serde_json::from_value(value).map_err(|e| invalid_section(&section, e))?
}
"http2" => {
config.http2 =
serde_json::from_value(value).map_err(|e| invalid_section(&section, e))?
}
"response" => {
let part: ResponseSection =
serde_json::from_value(value).map_err(|e| invalid_section(&section, e))?;
config.server_header = part.server_header;
config.diagnostic_headers = part.diagnostic_headers;
config.compression = part.compression;
}
"pages" => {
config.pages =
serde_json::from_value(value).map_err(|e| invalid_section(&section, e))?
}
"cache" => {
config.cache =
serde_json::from_value(value).map_err(|e| invalid_section(&section, e))?
}
"transform" => {
config.transform =
serde_json::from_value(value).map_err(|e| invalid_section(&section, e))?
}
"logging" => {
if value.get("logging").is_some() || value.get("error_log").is_some() {
let part: LoggingSection =
serde_json::from_value(value).map_err(|e| invalid_section(&section, e))?;
config.logging = part.logging;
config.error_log = part.error_log;
} else {
config.logging =
serde_json::from_value(value).map_err(|e| invalid_section(&section, e))?;
}
}
"forwarding" => {
config.forwarding =
serde_json::from_value(value).map_err(|e| invalid_section(&section, e))?
}
"headers" => {
config.headers =
serde_json::from_value(value).map_err(|e| invalid_section(&section, e))?
}
"prometheus" => {
config.prometheus =
serde_json::from_value(value).map_err(|e| invalid_section(&section, e))?
}
"geoip" => {
config.geoip_updates =
serde_json::from_value(value).map_err(|e| invalid_section(&section, e))?
}
"administration" => {
config.administration =
serde_json::from_value(value).map_err(|e| invalid_section(&section, e))?
}
"tls" => {
config.tls = serde_json::from_value(value).map_err(|e| invalid_section(&section, e))?
}
"vhosts" => {
config.vhosts =
serde_json::from_value(value).map_err(|e| invalid_section(&section, e))?
}
"web-services" => {
config.web_services =
serde_json::from_value(value).map_err(|e| invalid_section(&section, e))?
}
"php-fpm-profiles" => {
config.php_fpm_profiles =
serde_json::from_value(value).map_err(|e| invalid_section(&section, e))?
}
"redirects" => {
config.redirects =
serde_json::from_value(value).map_err(|e| invalid_section(&section, e))?
}
"not_found_hosts" => {
config.not_found_hosts =
serde_json::from_value(value).map_err(|e| invalid_section(&section, e))?
}
"streams" => {
config.streams =
serde_json::from_value(value).map_err(|e| invalid_section(&section, e))?
}
"acl-profiles" => {
config.acl_profiles =
serde_json::from_value(value).map_err(|e| invalid_section(&section, e))?
}
"host-policies" => {
config.host_policies =
serde_json::from_value(value).map_err(|e| invalid_section(&section, e))?
}
"user-agent-blocking" => {
config.user_agent_blocking =
serde_json::from_value(value).map_err(|e| invalid_section(&section, e))?
}
_ => {
return Err(ApiError(
StatusCode::NOT_FOUND,
"unknown configuration section".into(),
))
}
}
state
.update_as(
Update {
expected_revision: input.expected_revision,
config,
},
session.username,
)
.await
.map(Json)
}
fn logs_payload(state: &App) -> Value {
json!({
"entries": state.logs.recent_limit(crate::logging::LIVE_WINDOW),