52 lines
1.1 KiB
Go
52 lines
1.1 KiB
Go
package list
|
|
|
|
import (
|
|
"github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/account"
|
|
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys"
|
|
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys/asymmetric/encryptionkey"
|
|
)
|
|
|
|
type aclStateBuilder struct {
|
|
log ACLList
|
|
identity string
|
|
key encryptionkey.PrivKey
|
|
decoder keys.Decoder
|
|
}
|
|
|
|
func newACLStateBuilderWithIdentity(decoder keys.Decoder, accountData *account.AccountData) *aclStateBuilder {
|
|
return &aclStateBuilder{
|
|
decoder: decoder,
|
|
identity: accountData.Identity,
|
|
key: accountData.EncKey,
|
|
}
|
|
}
|
|
|
|
func newACLStateBuilder() *aclStateBuilder {
|
|
return &aclStateBuilder{}
|
|
}
|
|
|
|
func (sb *aclStateBuilder) Init(aclLog ACLList) error {
|
|
sb.log = aclLog
|
|
return nil
|
|
}
|
|
|
|
func (sb *aclStateBuilder) Build() (*ACLState, error) {
|
|
var (
|
|
err error
|
|
state *ACLState
|
|
)
|
|
|
|
if sb.decoder != nil {
|
|
state = newACLStateWithIdentity(sb.identity, sb.key, sb.decoder)
|
|
} else {
|
|
state = newACLState()
|
|
}
|
|
|
|
sb.log.Iterate(func(c *Record) (isContinue bool) {
|
|
err = state.applyChangeAndUpdate(c)
|
|
return err == nil
|
|
})
|
|
|
|
return state, err
|
|
}
|