aboutsummaryrefslogtreecommitdiffstats
path: root/src/document/replica.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
commit3d7230d952aa4a71a1aeb64fee9841d16b70ed91 (patch)
tree82c36db267f03afe88b728d130e20955ca29a2da /src/document/replica.rs
parentf44fbf5b93269bb3573e8a2701e70ab0d7613153 (diff)
access: signatures required
"signatures": "required": a change counts only once a signature by its committer vouches for it, and waits until then; every node then signs every change it makes. Auth plan M6.
Diffstat (limited to 'src/document/replica.rs')
-rw-r--r--src/document/replica.rs15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/document/replica.rs b/src/document/replica.rs
index a409969..cdf789c 100644
--- a/src/document/replica.rs
+++ b/src/document/replica.rs
@@ -230,6 +230,19 @@ impl Replica {
&mut self,
f: impl FnOnce(&mut Document, &mut automerge::PatchLog) -> (T, bool),
) -> T {
+ self.logged_signed(|doc, _, log| f(doc, log))
+ }
+
+ /// [`logged`](Self::logged), `f` given the document's signatures too
+ /// (`access::screen`, judging received changes, checks theirs).
+ pub(crate) fn logged_signed<T>(
+ &mut self,
+ f: impl FnOnce(
+ &mut Document,
+ &mut super::signatures::Signatures,
+ &mut automerge::PatchLog,
+ ) -> (T, bool),
+ ) -> T {
use crate::locks::MutexExt;
let before = sorted_heads(&self.doc);
let mut log = self.log.lock_or_recover();
@@ -238,7 +251,7 @@ impl Replica {
// lead here.
*log = Log::at(self.epoch_seq, before);
}
- let (out, whole) = f(&mut self.doc, &mut log.patches);
+ let (out, whole) = f(&mut self.doc, &mut self.signatures, &mut log.patches);
let after = sorted_heads(&self.doc);
if whole {
log.to = after;