From 092e9096b83f3982de6e3162a8b5f62f31d9422a Mon Sep 17 00:00:00 2001 From: mcrakhman Date: Tue, 5 Jul 2022 15:58:11 +0200 Subject: [PATCH] WIP change init logic --- data/aclstatebuilder.go | 15 +++++++-------- data/documentstatebuilder.go | 13 +++++++++---- data/snapshotvalidator.go | 35 +++++++++++++++++------------------ 3 files changed, 33 insertions(+), 30 deletions(-) diff --git a/data/aclstatebuilder.go b/data/aclstatebuilder.go index 9ac3ddff..0f42b9a2 100644 --- a/data/aclstatebuilder.go +++ b/data/aclstatebuilder.go @@ -20,9 +20,11 @@ type decreasedPermissionsParameters struct { startChange string } -func NewACLStateBuilder(decoder threadmodels.SigningPubKeyDecoder) *ACLStateBuilder { +func NewACLStateBuilder(decoder threadmodels.SigningPubKeyDecoder, accountData *AccountData) *ACLStateBuilder { return &ACLStateBuilder{ - decoder: decoder, + decoder: decoder, + identity: accountData.Identity, + key: accountData.EncKey, } } @@ -32,8 +34,7 @@ func (sb *ACLStateBuilder) Build() (*ACLState, error) { } func (sb *ACLStateBuilder) Init( - tree *Tree, - accountData *AccountData) error { + tree *Tree) error { root := tree.Root() if !root.IsSnapshot { return fmt.Errorf("root should always be a snapshot") @@ -42,15 +43,13 @@ func (sb *ACLStateBuilder) Init( snapshot := root.Content.GetAclData().GetAclSnapshot() state, err := NewACLStateFromSnapshot( snapshot, - accountData.Identity, - accountData.EncKey, + sb.identity, + sb.key, sb.decoder) if err != nil { return fmt.Errorf("could not build aclState from snapshot: %w", err) } sb.tree = tree - sb.identity = accountData.Identity - sb.key = accountData.EncKey sb.aclState = state return nil diff --git a/data/documentstatebuilder.go b/data/documentstatebuilder.go index 3ab6e677..7bf74ffc 100644 --- a/data/documentstatebuilder.go +++ b/data/documentstatebuilder.go @@ -4,20 +4,25 @@ import ( "fmt" ) +// example -> + type documentStateBuilder struct { tree *Tree aclState *ACLState // TODO: decide if this is needed or not stateProvider InitialStateProvider } -func newDocumentStateBuilder(tree *Tree, state *ACLState, stateProvider InitialStateProvider) *documentStateBuilder { +func newDocumentStateBuilder(stateProvider InitialStateProvider) *documentStateBuilder { return &documentStateBuilder{ - tree: tree, - aclState: state, stateProvider: stateProvider, } } +func (d *documentStateBuilder) init(aclState *ACLState, tree *Tree) { + d.tree = tree + d.aclState = aclState +} + // TODO: we should probably merge the two builders into one func (d *documentStateBuilder) build() (s DocumentState, err error) { var ( @@ -45,7 +50,7 @@ func (d *documentStateBuilder) build() (s DocumentState, err error) { return true } if c.DecryptedDocumentChange != nil { - _, err = s.ApplyChange(c.DecryptedDocumentChange, c.Id) + s, err = s.ApplyChange(c.DecryptedDocumentChange, c.Id) if err != nil { return false } diff --git a/data/snapshotvalidator.go b/data/snapshotvalidator.go index 29a7ee43..58de1b03 100644 --- a/data/snapshotvalidator.go +++ b/data/snapshotvalidator.go @@ -6,32 +6,31 @@ import ( ) type SnapshotValidator struct { - aclTree *Tree - identity string - key threadmodels.EncryptionPrivKey - decoder threadmodels.SigningPubKeyDecoder + aclTree *Tree + identity string + key threadmodels.EncryptionPrivKey + decoder threadmodels.SigningPubKeyDecoder + stateBuilder *ACLStateBuilder } func NewSnapshotValidator( - aclTree *Tree, - identity string, - key threadmodels.EncryptionPrivKey, - decoder threadmodels.SigningPubKeyDecoder) *SnapshotValidator { + decoder threadmodels.SigningPubKeyDecoder, + accountData *AccountData) *SnapshotValidator { return &SnapshotValidator{ - aclTree: aclTree, - identity: identity, - key: key, - decoder: decoder, + identity: accountData.Identity, + key: accountData.EncKey, + decoder: decoder, + stateBuilder: NewACLStateBuilder(decoder, accountData), } } -func (s *SnapshotValidator) ValidateSnapshot(ch *Change) (bool, error) { - stateBuilder, err := NewACLStateBuilder(s.aclTree, s.identity, s.key, s.decoder) - if err != nil { - return false, err - } +func (s *SnapshotValidator) Init(aclTree *Tree) error { + s.aclTree = aclTree + return s.stateBuilder.Init(aclTree) +} - st, found, err := stateBuilder.BuildBefore(ch.Id) +func (s *SnapshotValidator) ValidateSnapshot(ch *Change) (bool, error) { + st, found, err := s.stateBuilder.BuildBefore(ch.Id) if err != nil { return false, err }