list

package
v0.5.20 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 29, 2024 License: MIT Imports: 15 Imported by: 0

Documentation

Index

Constants

View Source
const MaxMetadataLen = 1024

Variables

View Source
var (
	ErrNoSuchAccount             = errors.New("no such account")
	ErrPendingRequest            = errors.New("already exists pending request")
	ErrUnexpectedContentType     = errors.New("unexpected content type")
	ErrIncorrectIdentity         = errors.New("incorrect identity")
	ErrIncorrectInviteKey        = errors.New("incorrect invite key")
	ErrFailedToDecrypt           = errors.New("failed to decrypt key")
	ErrNoMetadataKey             = errors.New("no metadata key")
	ErrNoSuchRecord              = errors.New("no such record")
	ErrNoSuchRequest             = errors.New("no such request")
	ErrNoSuchInvite              = errors.New("no such invite")
	ErrInsufficientPermissions   = errors.New("insufficient permissions")
	ErrIsOwner                   = errors.New("can't be made by owner")
	ErrIncorrectNumberOfAccounts = errors.New("incorrect number of accounts")
	ErrDuplicateAccounts         = errors.New("duplicate accounts")
	ErrNoReadKey                 = errors.New("no read key")
	ErrIncorrectReadKey          = errors.New("incorrect read key")
	ErrInvalidSignature          = errors.New("signature is invalid")
	ErrIncorrectRoot             = errors.New("incorrect root")
	ErrIncorrectRecordSequence   = errors.New("incorrect prev id of a record")
	ErrMetadataTooLarge          = errors.New("metadata size too large")
	ErrOwnerNotFound             = errors.New("owner not found")
)
View Source
var (
	ErrIncorrectCID        = errors.New("incorrect CID")
	ErrRecordAlreadyExists = errors.New("record already exists")
)

Functions

func WrapAclRecord added in v0.2.15

Types

type AcceptorVerifier added in v0.2.11

type AcceptorVerifier interface {
	VerifyAcceptor(rec *consensusproto.RawRecord) (err error)
}

type AccountAdd added in v0.3.18

type AccountAdd struct {
	Identity    crypto.PubKey
	Permissions AclPermissions
	Metadata    []byte
}

type AccountRemovePayload added in v0.2.11

type AccountRemovePayload struct {
	Identities []crypto.PubKey
	Change     ReadKeyChangePayload
}

type AccountState added in v0.3.18

type AccountState struct {
	PubKey            crypto.PubKey
	Permissions       AclPermissions
	Status            AclStatus
	RequestMetadata   []byte
	KeyRecordId       string
	PermissionChanges []PermissionChange
}

type AccountsAddPayload added in v0.3.18

type AccountsAddPayload struct {
	Additions []AccountAdd
}

type AclAccountState added in v0.2.15

type AclAccountState struct {
	PubKey          crypto.PubKey
	Permissions     AclPermissions
	RequestMetadata []byte
	KeyRecordId     string
}

type AclKeys added in v0.2.15

type AclKeys struct {
	ReadKey         crypto.SymKey
	MetadataPrivKey crypto.PrivKey
	MetadataPubKey  crypto.PubKey
}

type AclList

type AclList interface {
	RWLocker
	Id() string
	Root() *consensusproto.RawRecordWithId
	Records() []*AclRecord
	AclState() *AclState
	IsAfter(first string, second string) (bool, error)
	HasHead(head string) bool
	Head() *AclRecord

	RecordsAfter(ctx context.Context, id string) (records []*consensusproto.RawRecordWithId, err error)
	RecordsBefore(ctx context.Context, headId string) (records []*consensusproto.RawRecordWithId, err error)
	Get(id string) (*AclRecord, error)
	GetIndex(idx int) (*AclRecord, error)
	Iterate(iterFunc IterFunc)
	IterateFrom(startId string, iterFunc IterFunc)

	KeyStorage() crypto.KeyStorage
	RecordBuilder() AclRecordBuilder

	ValidateRawRecord(rawRec *consensusproto.RawRecord, afterValid func(state *AclState) error) (err error)
	AddRawRecord(rawRec *consensusproto.RawRecordWithId) (err error)
	AddRawRecords(rawRecords []*consensusproto.RawRecordWithId) (err error)

	Close(ctx context.Context) (err error)
}

func BuildAclList

func BuildAclList(storage liststorage.ListStorage, verifier AcceptorVerifier) (AclList, error)

func BuildAclListWithIdentity

func BuildAclListWithIdentity(acc *accountdata.AccountKeys, storage liststorage.ListStorage, verifier AcceptorVerifier) (AclList, error)

func NewTestAclWithRoot added in v0.2.11

func NewTestAclWithRoot(keys *accountdata.AccountKeys, root *consensusproto.RawRecordWithId) (AclList, error)

func NewTestDerivedAcl

func NewTestDerivedAcl(spaceId string, keys *accountdata.AccountKeys) (AclList, error)

func NewTestDerivedAclMetadata added in v0.3.18

func NewTestDerivedAclMetadata(spaceId string, keys *accountdata.AccountKeys, metadata []byte) (AclList, error)

type AclPermissions added in v0.2.11

type AclPermissions aclrecordproto.AclUserPermissions

func (AclPermissions) CanManageAccounts added in v0.2.11

func (p AclPermissions) CanManageAccounts() bool

func (AclPermissions) CanWrite added in v0.2.11

func (p AclPermissions) CanWrite() bool

func (AclPermissions) IsOwner added in v0.2.11

func (p AclPermissions) IsOwner() bool

func (AclPermissions) NoPermissions added in v0.2.11

func (p AclPermissions) NoPermissions() bool

type AclRecord

type AclRecord struct {
	Id                string
	PrevId            string
	Timestamp         int64
	AcceptorTimestamp int64
	Data              []byte
	Identity          crypto.PubKey
	Model             interface{}
	Signature         []byte
}

type AclRecordBuilder

type AclRecordBuilder interface {
	UnmarshallWithId(rawIdRecord *consensusproto.RawRecordWithId) (rec *AclRecord, err error)
	Unmarshall(rawRecord *consensusproto.RawRecord) (rec *AclRecord, err error)

	BuildRoot(content RootContent) (rec *consensusproto.RawRecordWithId, err error)
	BuildBatchRequest(payload BatchRequestPayload) (rawRecord *consensusproto.RawRecord, err error)
	BuildInvite() (res InviteResult, err error)
	BuildInviteRevoke(inviteRecordId string) (rawRecord *consensusproto.RawRecord, err error)
	BuildRequestJoin(payload RequestJoinPayload) (rawRecord *consensusproto.RawRecord, err error)
	BuildRequestAccept(payload RequestAcceptPayload) (rawRecord *consensusproto.RawRecord, err error)
	BuildRequestDecline(requestRecordId string) (rawRecord *consensusproto.RawRecord, err error)
	BuildRequestCancel(requestRecordId string) (rawRecord *consensusproto.RawRecord, err error)
	BuildRequestRemove() (rawRecord *consensusproto.RawRecord, err error)
	BuildPermissionChange(payload PermissionChangePayload) (rawRecord *consensusproto.RawRecord, err error)
	BuildPermissionChanges(payload PermissionChangesPayload) (rawRecord *consensusproto.RawRecord, err error)
	BuildReadKeyChange(payload ReadKeyChangePayload) (rawRecord *consensusproto.RawRecord, err error)
	BuildAccountRemove(payload AccountRemovePayload) (rawRecord *consensusproto.RawRecord, err error)
	BuildAccountsAdd(payload AccountsAddPayload) (rawRecord *consensusproto.RawRecord, err error)
}

func NewAclRecordBuilder

func NewAclRecordBuilder(id string, keyStorage crypto.KeyStorage, keys *accountdata.AccountKeys, verifier AcceptorVerifier) AclRecordBuilder

type AclState

type AclState struct {
	// contains filtered or unexported fields
}

func NewTestAclStateWithUsers added in v0.4.0

func NewTestAclStateWithUsers(numWriters, numReaders, numInvites int) *AclState

func (*AclState) AccountKey added in v0.2.15

func (st *AclState) AccountKey() crypto.PrivKey

func (*AclState) ApplyRecord added in v0.3.26

func (st *AclState) ApplyRecord(record *AclRecord) (err error)

func (*AclState) Copy added in v0.3.26

func (st *AclState) Copy() *AclState

func (*AclState) CurrentAccounts added in v0.3.21

func (st *AclState) CurrentAccounts() []AccountState

func (*AclState) CurrentMetadataKey added in v0.2.15

func (st *AclState) CurrentMetadataKey() (crypto.PubKey, error)

func (*AclState) CurrentReadKey

func (st *AclState) CurrentReadKey() (crypto.SymKey, error)

func (*AclState) CurrentReadKeyId

func (st *AclState) CurrentReadKeyId() string

func (*AclState) GetInviteIdByPrivKey added in v0.3.18

func (st *AclState) GetInviteIdByPrivKey(inviteKey crypto.PrivKey) (recId string, err error)

func (*AclState) GetMetadata added in v0.2.15

func (st *AclState) GetMetadata(identity crypto.PubKey, decrypt bool) (res []byte, err error)

func (*AclState) HadReadPermissions added in v0.3.21

func (st *AclState) HadReadPermissions(identity crypto.PubKey) (had bool)

func (*AclState) Identity added in v0.3.20

func (st *AclState) Identity() crypto.PubKey

func (*AclState) InviteIds added in v0.3.26

func (st *AclState) InviteIds() []string

func (*AclState) Invites added in v0.3.20

func (st *AclState) Invites() []crypto.PubKey

func (*AclState) IsEmpty added in v0.4.1

func (st *AclState) IsEmpty() bool

func (*AclState) JoinRecord added in v0.3.18

func (st *AclState) JoinRecord(identity crypto.PubKey, decrypt bool) (RequestRecord, error)

func (*AclState) JoinRecords added in v0.2.11

func (st *AclState) JoinRecords(decrypt bool) (records []RequestRecord, err error)

func (*AclState) Keys added in v0.2.15

func (st *AclState) Keys() map[string]AclKeys

func (*AclState) LastRecordId

func (st *AclState) LastRecordId() string

func (*AclState) OwnerPubKey added in v0.3.33

func (st *AclState) OwnerPubKey() (ownerIdentity crypto.PubKey, err error)

func (*AclState) Permissions added in v0.2.11

func (st *AclState) Permissions(identity crypto.PubKey) AclPermissions

func (*AclState) PermissionsAtRecord added in v0.3.18

func (st *AclState) PermissionsAtRecord(id string, pubKey crypto.PubKey) (AclPermissions, error)

func (*AclState) Record added in v0.3.20

func (st *AclState) Record(identity crypto.PubKey) (RequestRecord, error)

func (*AclState) RemoveRecords added in v0.2.11

func (st *AclState) RemoveRecords() (records []RequestRecord)

func (*AclState) Validator added in v0.2.11

func (st *AclState) Validator() ContentValidator

type AclStatus added in v0.3.18

type AclStatus int
const (
	StatusNone AclStatus = iota
	StatusJoining
	StatusActive
	StatusRemoved
	StatusDeclined
	StatusRemoving
	StatusCanceled
)

type AclTestExecutor added in v0.3.20

type AclTestExecutor struct {
	// contains filtered or unexported fields
}

func NewAclExecutor added in v0.3.20

func NewAclExecutor(spaceId string) *AclTestExecutor

func NewExternalKeysAclExecutor added in v0.5.0

func NewExternalKeysAclExecutor(spaceId string, keys *accountdata.AccountKeys, ownerMeta []byte, root *consensusproto.RawRecordWithId) *AclTestExecutor

func (*AclTestExecutor) ActualAccounts added in v0.3.20

func (a *AclTestExecutor) ActualAccounts() map[string]*TestAclState

func (*AclTestExecutor) Execute added in v0.3.20

func (a *AclTestExecutor) Execute(cmd string) (err error)

type BatchRequestPayload added in v0.3.26

type BatchRequestPayload struct {
	Additions     []AccountAdd
	Changes       []PermissionChangePayload
	Removals      AccountRemovePayload
	Approvals     []RequestAcceptPayload
	Declines      []string
	InviteRevokes []string
}

type ContentValidator added in v0.2.11

type ContentValidator interface {
	ValidateAclRecordContents(ch *AclRecord) (err error)
	ValidatePermissionChange(ch *aclrecordproto.AclAccountPermissionChange, authorIdentity crypto.PubKey) (err error)
	ValidatePermissionChanges(ch *aclrecordproto.AclAccountPermissionChanges, authorIdentity crypto.PubKey) (err error)
	ValidateAccountsAdd(ch *aclrecordproto.AclAccountsAdd, authorIdentity crypto.PubKey) (err error)
	ValidateInvite(ch *aclrecordproto.AclAccountInvite, authorIdentity crypto.PubKey) (err error)
	ValidateInviteRevoke(ch *aclrecordproto.AclAccountInviteRevoke, authorIdentity crypto.PubKey) (err error)
	ValidateRequestJoin(ch *aclrecordproto.AclAccountRequestJoin, authorIdentity crypto.PubKey) (err error)
	ValidateRequestAccept(ch *aclrecordproto.AclAccountRequestAccept, authorIdentity crypto.PubKey) (err error)
	ValidateRequestDecline(ch *aclrecordproto.AclAccountRequestDecline, authorIdentity crypto.PubKey) (err error)
	ValidateRequestCancel(ch *aclrecordproto.AclAccountRequestCancel, authorIdentity crypto.PubKey) (err error)
	ValidateAccountRemove(ch *aclrecordproto.AclAccountRemove, authorIdentity crypto.PubKey) (err error)
	ValidateRequestRemove(ch *aclrecordproto.AclAccountRequestRemove, authorIdentity crypto.PubKey) (err error)
	ValidateReadKeyChange(ch *aclrecordproto.AclReadKeyChange, authorIdentity crypto.PubKey) (err error)
}

type InviteResult added in v0.2.11

type InviteResult struct {
	InviteRec *consensusproto.RawRecord
	InviteKey crypto.PrivKey
}

type IterFunc

type IterFunc = func(record *AclRecord) (IsContinue bool)

type NoOpAcceptorVerifier added in v0.2.11

type NoOpAcceptorVerifier struct {
}

func (NoOpAcceptorVerifier) VerifyAcceptor added in v0.2.11

func (n NoOpAcceptorVerifier) VerifyAcceptor(rec *consensusproto.RawRecord) (err error)

type PermissionChange added in v0.3.18

type PermissionChange struct {
	RecordId   string
	Permission AclPermissions
}

type PermissionChangePayload added in v0.2.11

type PermissionChangePayload struct {
	Identity    crypto.PubKey
	Permissions AclPermissions
}

type PermissionChangesPayload added in v0.3.18

type PermissionChangesPayload struct {
	Changes []PermissionChangePayload
}

type RWLocker

type RWLocker interface {
	sync.Locker
	RLock()
	RUnlock()
}

type ReadKeyChangePayload added in v0.2.15

type ReadKeyChangePayload struct {
	MetadataKey crypto.PrivKey
	ReadKey     crypto.SymKey
}

type RequestAcceptPayload added in v0.2.11

type RequestAcceptPayload struct {
	RequestRecordId string
	Permissions     AclPermissions
}

type RequestJoinPayload added in v0.2.11

type RequestJoinPayload struct {
	InviteKey crypto.PrivKey
	Metadata  []byte
}

type RequestRecord added in v0.2.11

type RequestRecord struct {
	RequestIdentity crypto.PubKey
	RequestMetadata []byte
	KeyRecordId     string
	RecordId        string
	Type            RequestType
}

type RequestType added in v0.2.11

type RequestType int
const (
	RequestTypeRemove RequestType = iota
	RequestTypeJoin
)

type RootContent

type RootContent struct {
	PrivKey   crypto.PrivKey
	MasterKey crypto.PrivKey
	SpaceId   string
	Change    ReadKeyChangePayload
	Metadata  []byte
}

type TestAclState added in v0.3.20

type TestAclState struct {
	Keys *accountdata.AccountKeys
	Acl  AclList
}

type UserPermissionPair

type UserPermissionPair struct {
	Identity   crypto.PubKey
	Permission aclrecordproto.AclUserPermissions
}

Directories

Path Synopsis
Package mock_list is a generated GoMock package.
Package mock_list is a generated GoMock package.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL