WIP change init logic
This commit is contained in:
parent
6f53ceb768
commit
092e9096b8
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@ -10,28 +10,27 @@ type SnapshotValidator struct {
|
|||||||
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) Init(aclTree *Tree) error {
|
||||||
|
s.aclTree = aclTree
|
||||||
|
return s.stateBuilder.Init(aclTree)
|
||||||
|
}
|
||||||
|
|
||||||
func (s *SnapshotValidator) ValidateSnapshot(ch *Change) (bool, error) {
|
func (s *SnapshotValidator) ValidateSnapshot(ch *Change) (bool, error) {
|
||||||
stateBuilder, err := NewACLStateBuilder(s.aclTree, s.identity, s.key, s.decoder)
|
st, found, err := s.stateBuilder.BuildBefore(ch.Id)
|
||||||
if err != nil {
|
|
||||||
return false, err
|
|
||||||
}
|
|
||||||
|
|
||||||
st, found, err := stateBuilder.BuildBefore(ch.Id)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user