diff options
Diffstat (limited to 'src/state')
| -rw-r--r-- | src/state/mod.rs | 18 |
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) { |
