aboutsummaryrefslogtreecommitdiffstats
path: root/src/state/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/state/mod.rs')
-rw-r--r--src/state/mod.rs18
1 files changed, 12 insertions, 6 deletions
diff --git a/src/state/mod.rs b/src/state/mod.rs
index 2fbfd31..601febc 100644
--- a/src/state/mod.rs
+++ b/src/state/mod.rs
@@ -734,12 +734,7 @@ impl AppState {
if self.sign_every == SignEvery::Change {
return;
}
- let due = {
- let replica = doc.blocking_read();
- replica.signatures.pending()
- && (self.sign_every == SignEvery::Sent
- || crate::access::policy::of(&replica.doc).required())
- };
+ let due = self.sign_due(&doc.blocking_read());
if due {
let mut replica = doc.blocking_write();
let replica = &mut *replica;
@@ -747,6 +742,17 @@ impl AppState {
}
}
+ /// Whether `replica`'s latest change of this node should be signed before a message
+ /// takes it (`sign_sent`): no signature vouches for it, and `--sign-every sent` or a
+ /// policy requiring signatures says so.
+ pub(crate) fn sign_due(&self, replica: &crate::document::replica::Replica) -> bool {
+ self.node_key.is_some()
+ && self.sign_every != SignEvery::Change
+ && replica.signatures.pending()
+ && (self.sign_every == SignEvery::Sent
+ || crate::access::policy::of(&replica.doc).required())
+ }
+
pub(crate) fn publish_change(&self) {
self.notify_store_changed();
if let Err(error) = self.sync_events.send(SyncEvent::DocumentChanged) {