aboutsummaryrefslogtreecommitdiffstats
path: root/src/api/login.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
commit8523e9c67e375747147a0b05ec191ad81ce2e318 (patch)
tree5263ee759296f08a38091890b743f8d64b557c30 /src/api/login.rs
parent8f3f7b24f5a4e7cce4a006ec45b8061fe5cdd87c (diff)
signatures: changes signed by their node
Every node signs the changes it commits with its node key, an Ed25519 signature over the change's hash, kept beside the document. One signature on an actor's latest change vouches for its earlier ones. Protocol data and paths listed in _continuum/access/signed are signed, and writes with ?signed=true. Auth plan M5.
Diffstat (limited to 'src/api/login.rs')
-rw-r--r--src/api/login.rs3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/api/login.rs b/src/api/login.rs
index 023408e..b84a412 100644
--- a/src/api/login.rs
+++ b/src/api/login.rs
@@ -14,6 +14,7 @@
//! Every request may bring a token instead of a password: `Authorization: Bearer ct1…`
//! (`bearer`).
+use crate::document::signatures::Sign;
use std::sync::Arc;
use axum::{
@@ -261,7 +262,7 @@ pub(crate) async fn revoke_tokens(state: &AppState, name: &str, by: &str) -> Res
// Issued in this very millisecond: revoked too.
let after = state.clock.now_millis().as_u64() + 1;
state
- .mutate_doc_for(Some(by.to_owned()), move |doc| {
+ .mutate_doc_for(Some(by.to_owned()), Sign::Protocol, move |doc| {
if !registry::exists(&*doc) {
return Err(ApiError(
StatusCode::CONFLICT,