WIP change init logic

This commit is contained in:
mcrakhman 2022-07-05 15:58:11 +02:00 committed by Mikhail Iudin
parent 6f53ceb768
commit 092e9096b8
No known key found for this signature in database
GPG Key ID: FAAAA8BAABDFF1C0
3 changed files with 33 additions and 30 deletions

View File

@ -20,9 +20,11 @@ type decreasedPermissionsParameters struct {
startChange string startChange string
} }
func NewACLStateBuilder(decoder threadmodels.SigningPubKeyDecoder) *ACLStateBuilder { func NewACLStateBuilder(decoder threadmodels.SigningPubKeyDecoder, accountData *AccountData) *ACLStateBuilder {
return &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( func (sb *ACLStateBuilder) Init(
tree *Tree, tree *Tree) error {
accountData *AccountData) error {
root := tree.Root() root := tree.Root()
if !root.IsSnapshot { if !root.IsSnapshot {
return fmt.Errorf("root should always be a snapshot") return fmt.Errorf("root should always be a snapshot")
@ -42,15 +43,13 @@ func (sb *ACLStateBuilder) Init(
snapshot := root.Content.GetAclData().GetAclSnapshot() snapshot := root.Content.GetAclData().GetAclSnapshot()
state, err := NewACLStateFromSnapshot( state, err := NewACLStateFromSnapshot(
snapshot, snapshot,
accountData.Identity, sb.identity,
accountData.EncKey, sb.key,
sb.decoder) sb.decoder)
if err != nil { if err != nil {
return fmt.Errorf("could not build aclState from snapshot: %w", err) return fmt.Errorf("could not build aclState from snapshot: %w", err)
} }
sb.tree = tree sb.tree = tree
sb.identity = accountData.Identity
sb.key = accountData.EncKey
sb.aclState = state sb.aclState = state
return nil return nil

View File

@ -4,20 +4,25 @@ import (
"fmt" "fmt"
) )
// example ->
type documentStateBuilder struct { type documentStateBuilder struct {
tree *Tree tree *Tree
aclState *ACLState // TODO: decide if this is needed or not aclState *ACLState // TODO: decide if this is needed or not
stateProvider InitialStateProvider stateProvider InitialStateProvider
} }
func newDocumentStateBuilder(tree *Tree, state *ACLState, stateProvider InitialStateProvider) *documentStateBuilder { func newDocumentStateBuilder(stateProvider InitialStateProvider) *documentStateBuilder {
return &documentStateBuilder{ return &documentStateBuilder{
tree: tree,
aclState: state,
stateProvider: stateProvider, 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 // TODO: we should probably merge the two builders into one
func (d *documentStateBuilder) build() (s DocumentState, err error) { func (d *documentStateBuilder) build() (s DocumentState, err error) {
var ( var (
@ -45,7 +50,7 @@ func (d *documentStateBuilder) build() (s DocumentState, err error) {
return true return true
} }
if c.DecryptedDocumentChange != nil { if c.DecryptedDocumentChange != nil {
_, err = s.ApplyChange(c.DecryptedDocumentChange, c.Id) s, err = s.ApplyChange(c.DecryptedDocumentChange, c.Id)
if err != nil { if err != nil {
return false return false
} }

View File

@ -6,32 +6,31 @@ import (
) )
type SnapshotValidator struct { type SnapshotValidator struct {
aclTree *Tree aclTree *Tree
identity string identity string
key threadmodels.EncryptionPrivKey key threadmodels.EncryptionPrivKey
decoder threadmodels.SigningPubKeyDecoder decoder threadmodels.SigningPubKeyDecoder
stateBuilder *ACLStateBuilder
} }
func NewSnapshotValidator( func NewSnapshotValidator(
aclTree *Tree, decoder threadmodels.SigningPubKeyDecoder,
identity string, accountData *AccountData) *SnapshotValidator {
key threadmodels.EncryptionPrivKey,
decoder threadmodels.SigningPubKeyDecoder) *SnapshotValidator {
return &SnapshotValidator{ return &SnapshotValidator{
aclTree: aclTree, identity: accountData.Identity,
identity: identity, key: accountData.EncKey,
key: key, decoder: decoder,
decoder: decoder, stateBuilder: NewACLStateBuilder(decoder, accountData),
} }
} }
func (s *SnapshotValidator) ValidateSnapshot(ch *Change) (bool, error) { func (s *SnapshotValidator) Init(aclTree *Tree) error {
stateBuilder, err := NewACLStateBuilder(s.aclTree, s.identity, s.key, s.decoder) s.aclTree = aclTree
if err != nil { return s.stateBuilder.Init(aclTree)
return false, err }
}
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 { if err != nil {
return false, err return false, err
} }