Expose Acl in space
This commit is contained in:
parent
3c5e3bed96
commit
94aea5bafb
@ -10,6 +10,7 @@ import (
|
|||||||
"github.com/anyproto/any-sync/commonspace/object/accountdata"
|
"github.com/anyproto/any-sync/commonspace/object/accountdata"
|
||||||
"github.com/anyproto/any-sync/commonspace/object/acl/liststorage"
|
"github.com/anyproto/any-sync/commonspace/object/acl/liststorage"
|
||||||
"github.com/anyproto/any-sync/consensus/consensusproto"
|
"github.com/anyproto/any-sync/consensus/consensusproto"
|
||||||
|
"github.com/anyproto/any-sync/util/cidutil"
|
||||||
"github.com/anyproto/any-sync/util/crypto"
|
"github.com/anyproto/any-sync/util/crypto"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -319,3 +320,18 @@ func (a *aclList) IterateFrom(startId string, iterFunc IterFunc) {
|
|||||||
func (a *aclList) Close(ctx context.Context) (err error) {
|
func (a *aclList) Close(ctx context.Context) (err error) {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func WrapAclRecord(rawRec *consensusproto.RawRecord) *consensusproto.RawRecordWithId {
|
||||||
|
payload, err := rawRec.Marshal()
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
id, err := cidutil.NewCidFromBytes(payload)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return &consensusproto.RawRecordWithId{
|
||||||
|
Payload: payload,
|
||||||
|
Id: id,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@ -7,26 +7,10 @@ import (
|
|||||||
"github.com/anyproto/any-sync/commonspace/object/accountdata"
|
"github.com/anyproto/any-sync/commonspace/object/accountdata"
|
||||||
"github.com/anyproto/any-sync/commonspace/object/acl/aclrecordproto"
|
"github.com/anyproto/any-sync/commonspace/object/acl/aclrecordproto"
|
||||||
"github.com/anyproto/any-sync/consensus/consensusproto"
|
"github.com/anyproto/any-sync/consensus/consensusproto"
|
||||||
"github.com/anyproto/any-sync/util/cidutil"
|
|
||||||
"github.com/anyproto/any-sync/util/crypto"
|
"github.com/anyproto/any-sync/util/crypto"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
func wrapRecord(rawRec *consensusproto.RawRecord) *consensusproto.RawRecordWithId {
|
|
||||||
payload, err := rawRec.Marshal()
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
id, err := cidutil.NewCidFromBytes(payload)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
return &consensusproto.RawRecordWithId{
|
|
||||||
Payload: payload,
|
|
||||||
Id: id,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
type aclFixture struct {
|
type aclFixture struct {
|
||||||
ownerKeys *accountdata.AccountKeys
|
ownerKeys *accountdata.AccountKeys
|
||||||
accountKeys *accountdata.AccountKeys
|
accountKeys *accountdata.AccountKeys
|
||||||
@ -71,7 +55,7 @@ func (fx *aclFixture) inviteAccount(t *testing.T, perms AclPermissions) {
|
|||||||
// building invite
|
// building invite
|
||||||
inv, err := ownerAcl.RecordBuilder().BuildInvite()
|
inv, err := ownerAcl.RecordBuilder().BuildInvite()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
inviteRec := wrapRecord(inv.InviteRec)
|
inviteRec := WrapAclRecord(inv.InviteRec)
|
||||||
fx.addRec(t, inviteRec)
|
fx.addRec(t, inviteRec)
|
||||||
|
|
||||||
// building request join
|
// building request join
|
||||||
@ -80,7 +64,7 @@ func (fx *aclFixture) inviteAccount(t *testing.T, perms AclPermissions) {
|
|||||||
InviteKey: inv.InviteKey,
|
InviteKey: inv.InviteKey,
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
requestJoinRec := wrapRecord(requestJoin)
|
requestJoinRec := WrapAclRecord(requestJoin)
|
||||||
fx.addRec(t, requestJoinRec)
|
fx.addRec(t, requestJoinRec)
|
||||||
|
|
||||||
// building request accept
|
// building request accept
|
||||||
@ -92,7 +76,7 @@ func (fx *aclFixture) inviteAccount(t *testing.T, perms AclPermissions) {
|
|||||||
// validate
|
// validate
|
||||||
err = ownerAcl.ValidateRawRecord(requestAccept)
|
err = ownerAcl.ValidateRawRecord(requestAccept)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
requestAcceptRec := wrapRecord(requestAccept)
|
requestAcceptRec := WrapAclRecord(requestAccept)
|
||||||
fx.addRec(t, requestAcceptRec)
|
fx.addRec(t, requestAcceptRec)
|
||||||
|
|
||||||
// checking acl state
|
// checking acl state
|
||||||
@ -132,13 +116,13 @@ func TestAclList_InviteRevoke(t *testing.T) {
|
|||||||
// building invite
|
// building invite
|
||||||
inv, err := fx.ownerAcl.RecordBuilder().BuildInvite()
|
inv, err := fx.ownerAcl.RecordBuilder().BuildInvite()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
inviteRec := wrapRecord(inv.InviteRec)
|
inviteRec := WrapAclRecord(inv.InviteRec)
|
||||||
fx.addRec(t, inviteRec)
|
fx.addRec(t, inviteRec)
|
||||||
|
|
||||||
// building invite revoke
|
// building invite revoke
|
||||||
inviteRevoke, err := fx.ownerAcl.RecordBuilder().BuildInviteRevoke(ownerState.lastRecordId)
|
inviteRevoke, err := fx.ownerAcl.RecordBuilder().BuildInviteRevoke(ownerState.lastRecordId)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
inviteRevokeRec := wrapRecord(inviteRevoke)
|
inviteRevokeRec := WrapAclRecord(inviteRevoke)
|
||||||
fx.addRec(t, inviteRevokeRec)
|
fx.addRec(t, inviteRevokeRec)
|
||||||
|
|
||||||
// checking acl state
|
// checking acl state
|
||||||
@ -159,7 +143,7 @@ func TestAclList_RequestDecline(t *testing.T) {
|
|||||||
// building invite
|
// building invite
|
||||||
inv, err := ownerAcl.RecordBuilder().BuildInvite()
|
inv, err := ownerAcl.RecordBuilder().BuildInvite()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
inviteRec := wrapRecord(inv.InviteRec)
|
inviteRec := WrapAclRecord(inv.InviteRec)
|
||||||
fx.addRec(t, inviteRec)
|
fx.addRec(t, inviteRec)
|
||||||
|
|
||||||
// building request join
|
// building request join
|
||||||
@ -168,13 +152,13 @@ func TestAclList_RequestDecline(t *testing.T) {
|
|||||||
InviteKey: inv.InviteKey,
|
InviteKey: inv.InviteKey,
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
requestJoinRec := wrapRecord(requestJoin)
|
requestJoinRec := WrapAclRecord(requestJoin)
|
||||||
fx.addRec(t, requestJoinRec)
|
fx.addRec(t, requestJoinRec)
|
||||||
|
|
||||||
// building request decline
|
// building request decline
|
||||||
requestDecline, err := ownerAcl.RecordBuilder().BuildRequestDecline(ownerState.lastRecordId)
|
requestDecline, err := ownerAcl.RecordBuilder().BuildRequestDecline(ownerState.lastRecordId)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
requestDeclineRec := wrapRecord(requestDecline)
|
requestDeclineRec := WrapAclRecord(requestDecline)
|
||||||
fx.addRec(t, requestDeclineRec)
|
fx.addRec(t, requestDeclineRec)
|
||||||
|
|
||||||
// checking acl state
|
// checking acl state
|
||||||
@ -198,7 +182,7 @@ func TestAclList_Remove(t *testing.T) {
|
|||||||
ReadKey: newReadKey,
|
ReadKey: newReadKey,
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
removeRec := wrapRecord(remove)
|
removeRec := WrapAclRecord(remove)
|
||||||
fx.addRec(t, removeRec)
|
fx.addRec(t, removeRec)
|
||||||
|
|
||||||
// checking acl state
|
// checking acl state
|
||||||
@ -225,7 +209,7 @@ func TestAclList_ReadKeyChange(t *testing.T) {
|
|||||||
newReadKey := crypto.NewAES()
|
newReadKey := crypto.NewAES()
|
||||||
readKeyChange, err := fx.ownerAcl.RecordBuilder().BuildReadKeyChange(newReadKey)
|
readKeyChange, err := fx.ownerAcl.RecordBuilder().BuildReadKeyChange(newReadKey)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
readKeyRec := wrapRecord(readKeyChange)
|
readKeyRec := WrapAclRecord(readKeyChange)
|
||||||
fx.addRec(t, readKeyRec)
|
fx.addRec(t, readKeyRec)
|
||||||
|
|
||||||
// checking acl state
|
// checking acl state
|
||||||
@ -255,7 +239,7 @@ func TestAclList_PermissionChange(t *testing.T) {
|
|||||||
Permissions: AclPermissions(aclrecordproto.AclUserPermissions_Writer),
|
Permissions: AclPermissions(aclrecordproto.AclUserPermissions_Writer),
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
permissionChangeRec := wrapRecord(permissionChange)
|
permissionChangeRec := WrapAclRecord(permissionChange)
|
||||||
fx.addRec(t, permissionChangeRec)
|
fx.addRec(t, permissionChangeRec)
|
||||||
|
|
||||||
// checking acl state
|
// checking acl state
|
||||||
@ -279,7 +263,7 @@ func TestAclList_RequestRemove(t *testing.T) {
|
|||||||
|
|
||||||
removeRequest, err := fx.accountAcl.RecordBuilder().BuildRequestRemove()
|
removeRequest, err := fx.accountAcl.RecordBuilder().BuildRequestRemove()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
removeRequestRec := wrapRecord(removeRequest)
|
removeRequestRec := WrapAclRecord(removeRequest)
|
||||||
fx.addRec(t, removeRequestRec)
|
fx.addRec(t, removeRequestRec)
|
||||||
|
|
||||||
recs := fx.accountAcl.AclState().RemoveRecords()
|
recs := fx.accountAcl.AclState().RemoveRecords()
|
||||||
@ -292,7 +276,7 @@ func TestAclList_RequestRemove(t *testing.T) {
|
|||||||
ReadKey: newReadKey,
|
ReadKey: newReadKey,
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
removeRec := wrapRecord(remove)
|
removeRec := WrapAclRecord(remove)
|
||||||
fx.addRec(t, removeRec)
|
fx.addRec(t, removeRec)
|
||||||
|
|
||||||
// checking acl state
|
// checking acl state
|
||||||
|
|||||||
@ -46,7 +46,7 @@ func (s *SyncAcl) Run(ctx context.Context) (err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *SyncAcl) HandleRequest(ctx context.Context, senderId string, request *spacesyncproto.ObjectSyncMessage) (response *spacesyncproto.ObjectSyncMessage, err error) {
|
func (s *SyncAcl) HandleRequest(ctx context.Context, senderId string, request *spacesyncproto.ObjectSyncMessage) (response *spacesyncproto.ObjectSyncMessage, err error) {
|
||||||
return s.HandleRequest(ctx, senderId, request)
|
return s.syncHandler.HandleRequest(ctx, senderId, request)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *SyncAcl) SetHeadUpdater(updater HeadUpdater) {
|
func (s *SyncAcl) SetHeadUpdater(updater HeadUpdater) {
|
||||||
@ -54,7 +54,7 @@ func (s *SyncAcl) SetHeadUpdater(updater HeadUpdater) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *SyncAcl) HandleMessage(ctx context.Context, senderId string, request *spacesyncproto.ObjectSyncMessage) (err error) {
|
func (s *SyncAcl) HandleMessage(ctx context.Context, senderId string, request *spacesyncproto.ObjectSyncMessage) (err error) {
|
||||||
return s.HandleMessage(ctx, senderId, request)
|
return s.syncHandler.HandleMessage(ctx, senderId, request)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *SyncAcl) Init(a *app.App) (err error) {
|
func (s *SyncAcl) Init(a *app.App) (err error) {
|
||||||
|
|||||||
@ -59,6 +59,7 @@ func NewSpaceId(id string, repKey uint64) string {
|
|||||||
type Space interface {
|
type Space interface {
|
||||||
Id() string
|
Id() string
|
||||||
Init(ctx context.Context) error
|
Init(ctx context.Context) error
|
||||||
|
Acl() list.AclList
|
||||||
|
|
||||||
StoredIds() []string
|
StoredIds() []string
|
||||||
DebugAllHeads() []headsync.TreeHeads
|
DebugAllHeads() []headsync.TreeHeads
|
||||||
@ -153,6 +154,10 @@ func (s *space) TreeBuilder() objecttreebuilder.TreeBuilder {
|
|||||||
return s.treeBuilder
|
return s.treeBuilder
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *space) Acl() list.AclList {
|
||||||
|
return s.aclList
|
||||||
|
}
|
||||||
|
|
||||||
func (s *space) Id() string {
|
func (s *space) Id() string {
|
||||||
return s.state.SpaceId
|
return s.state.SpaceId
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user