aboutsummaryrefslogtreecommitdiffstats
path: root/src/api/mod.rs
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2026-11-07 22:35:21 +0100
committertv <tv@krebsco.de>2026-11-07 22:35:21 +0100
commitf44fbf5b93269bb3573e8a2701e70ab0d7613153 (patch)
tree32915998f6e797afcc13f485ccde66bac0e94150 /src/api/mod.rs
parent389b11b597b6bf60f120b190002bbb76fff28dbf (diff)
access: the policy enforced
_continuum/access/policy ({"version": 1}) has every node screen every change it receives, on every path changes come in. A policy a node doesn't know stops its writes through the API. GET /admin/refused. Auth plan M6.
Diffstat (limited to 'src/api/mod.rs')
-rw-r--r--src/api/mod.rs2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/api/mod.rs b/src/api/mod.rs
index 38868e2..a12e219 100644
--- a/src/api/mod.rs
+++ b/src/api/mod.rs
@@ -62,6 +62,7 @@ pub(crate) fn router(state: AppState, auth_state: AuthState, debug_api: bool) ->
.route("/admin/stats", get(stats::get_stats))
.route("/admin/document", get(document::get_document))
.route("/admin/changes", get(changes::get_changes))
+ .route("/admin/refused", get(changes::get_refused))
.route("/admin/changes/{*key}", get(changes::get_changes_at))
.route("/admin/config", get(config::get_config))
.route("/auth/login", axum::routing::post(login::login))
@@ -311,6 +312,7 @@ pub(crate) fn store_status(error: StoreError, context: &str) -> ApiError {
| StoreError::NotCastable { .. } => StatusCode::CONFLICT,
StoreError::NotFound | StoreError::UnknownHeads => StatusCode::NOT_FOUND,
StoreError::Rejoining => StatusCode::SERVICE_UNAVAILABLE,
+ StoreError::UnknownPolicy(_) => StatusCode::CONFLICT,
other => {
error!(error = %format!("{other:#}"), "{context}");
return StatusCode::INTERNAL_SERVER_ERROR.into();