mirror of
https://github.com/anyproto/any-sync.git
synced 2025-06-07 21:47:02 +09:00
Add tests and builder
This commit is contained in:
parent
45371109cd
commit
8c4467f091
3 changed files with 55 additions and 2 deletions
|
@ -47,6 +47,11 @@ type PermissionChangePayload struct {
|
|||
Permissions AclPermissions
|
||||
}
|
||||
|
||||
type InviteChangePayload struct {
|
||||
IniviteRecordId string
|
||||
Permissions AclPermissions
|
||||
}
|
||||
|
||||
type PermissionChangesPayload struct {
|
||||
Changes []PermissionChangePayload
|
||||
}
|
||||
|
@ -88,6 +93,7 @@ type AclRecordBuilder interface {
|
|||
BuildBatchRequest(payload BatchRequestPayload) (rawRecord *consensusproto.RawRecord, err error)
|
||||
BuildInvite() (res InviteResult, err error)
|
||||
BuildInviteAnyone(permissions AclPermissions) (res InviteResult, err error)
|
||||
BuildInviteChange(inviteChange InviteChangePayload) (rawRecord *consensusproto.RawRecord, err error)
|
||||
BuildInviteRevoke(inviteRecordId string) (rawRecord *consensusproto.RawRecord, err error)
|
||||
BuildInviteJoin(payload InviteJoinPayload) (rawRecord *consensusproto.RawRecord, err error)
|
||||
BuildRequestJoin(payload RequestJoinPayload) (rawRecord *consensusproto.RawRecord, err error)
|
||||
|
@ -207,7 +213,9 @@ func (a *aclRecordBuilder) preflightCheck(rawRecord *consensusproto.RawRecord) (
|
|||
if err != nil {
|
||||
return
|
||||
}
|
||||
return a.state.Copy().ApplyRecord(aclRec)
|
||||
cp := a.state.Copy()
|
||||
cp.contentValidator.(*contentValidator).verifier = recordverifier.NewValidateFull()
|
||||
return cp.ApplyRecord(aclRec)
|
||||
}
|
||||
|
||||
func (a *aclRecordBuilder) BuildPermissionChanges(payload PermissionChangesPayload) (rawRecord *consensusproto.RawRecord, err error) {
|
||||
|
@ -331,6 +339,19 @@ func (a *aclRecordBuilder) BuildInvite() (res InviteResult, err error) {
|
|||
return
|
||||
}
|
||||
|
||||
func (a *aclRecordBuilder) BuildInviteChange(inviteChange InviteChangePayload) (rawRecord *consensusproto.RawRecord, err error) {
|
||||
if !a.state.Permissions(a.state.pubKey).CanManageAccounts() {
|
||||
err = ErrInsufficientPermissions
|
||||
return
|
||||
}
|
||||
inviteRec := &aclrecordproto.AclAccountInviteChange{
|
||||
InviteRecordId: inviteChange.IniviteRecordId,
|
||||
Permissions: aclrecordproto.AclUserPermissions(inviteChange.Permissions),
|
||||
}
|
||||
content := &aclrecordproto.AclContentValue{Value: &aclrecordproto.AclContentValue_InviteChange{InviteChange: inviteRec}}
|
||||
return a.buildRecord(content)
|
||||
}
|
||||
|
||||
func (a *aclRecordBuilder) BuildInviteAnyone(permissions AclPermissions) (res InviteResult, err error) {
|
||||
if !a.state.Permissions(a.state.pubKey).CanManageAccounts() {
|
||||
err = ErrInsufficientPermissions
|
||||
|
|
|
@ -373,6 +373,32 @@ func (a *AclTestExecutor) Execute(cmd string) (err error) {
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
case "invite_change":
|
||||
var permissions AclPermissions
|
||||
inviteParts := strings.Split(args[0], ",")
|
||||
if inviteParts[1] == "r" {
|
||||
permissions = AclPermissions(aclrecordproto.AclUserPermissions_Reader)
|
||||
} else if inviteParts[1] == "rw" {
|
||||
permissions = AclPermissions(aclrecordproto.AclUserPermissions_Writer)
|
||||
} else {
|
||||
permissions = AclPermissions(aclrecordproto.AclUserPermissions_Admin)
|
||||
}
|
||||
invite := a.invites[inviteParts[0]]
|
||||
invId, err := acl.AclState().GetInviteIdByPrivKey(invite)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
res, err := acl.RecordBuilder().BuildInviteChange(InviteChangePayload{
|
||||
IniviteRecordId: invId,
|
||||
Permissions: permissions,
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = addRec(WrapAclRecord(res))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
case "invite_anyone":
|
||||
var permissions AclPermissions
|
||||
inviteParts := strings.Split(args[0], ",")
|
||||
|
@ -517,12 +543,16 @@ func (a *AclTestExecutor) Execute(cmd string) (err error) {
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
invId, err := acl.AclState().GetInviteIdByPrivKey(invite)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = addRec(WrapAclRecord(inviteJoin))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
a.expectedAccounts[account].status = StatusActive
|
||||
a.expectedAccounts[account].perms = AclPermissions(aclrecordproto.AclUserPermissions_Reader)
|
||||
a.expectedAccounts[account].perms = acl.AclState().invites[invId].Permissions
|
||||
case "remove":
|
||||
identities := strings.Split(args[0], ",")
|
||||
var pubKeys []crypto.PubKey
|
||||
|
|
|
@ -136,7 +136,9 @@ func TestAclExecutor(t *testing.T) {
|
|||
{"new1.invite_join::invAnyoneId", nil},
|
||||
{"a.revoke::invAnyoneId", nil},
|
||||
{"new2.invite_join::invAnyoneId", ErrNoSuchInvite},
|
||||
{"a.invite_change::oldInvId,a", nil},
|
||||
{"new2.invite_join::oldInvId", nil},
|
||||
{"new2.add::new3,r,new3m", nil},
|
||||
}
|
||||
for _, cmd := range cmds {
|
||||
err := a.Execute(cmd.cmd)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue