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
}
func NewACLStateBuilder(decoder threadmodels.SigningPubKeyDecoder) *ACLStateBuilder {
func NewACLStateBuilder(decoder threadmodels.SigningPubKeyDecoder, accountData *AccountData) *ACLStateBuilder {
return &ACLStateBuilder{
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

View File

@ -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
}

View File

@ -10,28 +10,27 @@ type SnapshotValidator struct {
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,
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
}