Expose Acl in space

This commit is contained in:
mcrakhman 2023-07-10 23:17:05 +02:00
parent 3c5e3bed96
commit 94aea5bafb
No known key found for this signature in database
GPG Key ID: DED12CFEF5B8396B
4 changed files with 36 additions and 31 deletions

View File

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

View File

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

View File

@ -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) {

View File

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