[#174] subnet: Add comments to version dependent format checks

Also add `groupID` format checks.

Signed-off-by: Pavel Karpy <carpawell@nspcc.ru>
This commit is contained in:
Pavel Karpy 2021-11-24 13:33:24 +03:00 committed by LeL
parent c0636ff0ee
commit bd2d1cdf86
2 changed files with 88 additions and 5 deletions

View file

@ -11,8 +11,10 @@ import (
)
const (
// ErrInvalidSubnetID is thrown when subnet id is not a slice of 4 bytes.
// ErrInvalidSubnetID is thrown when subnet id is not a slice of 5 bytes.
ErrInvalidSubnetID = "invalid subnet ID"
// ErrInvalidGroupID is thrown when group id is not a slice of 5 bytes.
ErrInvalidGroupID = "invalid group ID"
// ErrInvalidOwner is thrown when owner has invalid format.
ErrInvalidOwner = "invalid owner"
// ErrInvalidAdmin is thrown when admin has invalid format.
@ -134,6 +136,11 @@ func Put(id []byte, ownerKey interop.PublicKey, info []byte) {
// Get returns info about subnet with the specified id.
func Get(id []byte) []byte {
// V2 format check
if len(id) != subnetIDSize {
panic("get: " + ErrInvalidSubnetID)
}
ctx := storage.GetReadOnlyContext()
key := append([]byte{infoPrefix}, id...)
raw := storage.Get(ctx, key)
@ -145,6 +152,11 @@ func Get(id []byte) []byte {
// Delete deletes subnet with the specified id.
func Delete(id []byte) {
// V2 format check
if len(id) != subnetIDSize {
panic("delete: " + ErrInvalidSubnetID)
}
ctx := storage.GetContext()
key := append([]byte{ownerPrefix}, id...)
raw := storage.Get(ctx, key)
@ -167,6 +179,11 @@ func Delete(id []byte) {
// AddNodeAdmin adds new node administrator to the specified subnetwork.
func AddNodeAdmin(subnetID []byte, adminKey interop.PublicKey) {
// V2 format check
if len(subnetID) != subnetIDSize {
panic("addNodeAdmin: " + ErrInvalidSubnetID)
}
if len(adminKey) != interop.PublicKeyCompressedLen {
panic("addNodeAdmin: " + ErrInvalidAdmin)
}
@ -197,6 +214,11 @@ func AddNodeAdmin(subnetID []byte, adminKey interop.PublicKey) {
// RemoveNodeAdmin removes node administrator from the specified subnetwork.
// Must be called by subnet owner only.
func RemoveNodeAdmin(subnetID []byte, adminKey interop.PublicKey) {
// V2 format check
if len(subnetID) != subnetIDSize {
panic("removeNodeAdmin: " + ErrInvalidSubnetID)
}
if len(adminKey) != interop.PublicKeyCompressedLen {
panic("removeNodeAdmin: " + ErrInvalidAdmin)
}
@ -228,6 +250,11 @@ func RemoveNodeAdmin(subnetID []byte, adminKey interop.PublicKey) {
// Must be called by subnet's owner or node administrator
// only.
func AddNode(subnetID []byte, node interop.PublicKey) {
// V2 format check
if len(subnetID) != subnetIDSize {
panic("addNode: " + ErrInvalidSubnetID)
}
if len(node) != interop.PublicKeyCompressedLen {
panic("addNode: " + ErrInvalidNode)
}
@ -262,6 +289,11 @@ func AddNode(subnetID []byte, node interop.PublicKey) {
// Must be called by subnet's owner or node administrator
// only.
func RemoveNode(subnetID []byte, node interop.PublicKey) {
// V2 format check
if len(subnetID) != subnetIDSize {
panic("removeNode: " + ErrInvalidSubnetID)
}
if len(node) != interop.PublicKeyCompressedLen {
panic("removeNode: " + ErrInvalidNode)
}
@ -297,6 +329,11 @@ func RemoveNode(subnetID []byte, node interop.PublicKey) {
// NodeAllowed checks if node is included in the
// specified subnet or not.
func NodeAllowed(subnetID []byte, node interop.PublicKey) bool {
// V2 format check
if len(subnetID) != subnetIDSize {
panic("nodeAllowed: " + ErrInvalidSubnetID)
}
if len(node) != interop.PublicKeyCompressedLen {
panic("nodeAllowed: " + ErrInvalidNode)
}
@ -318,6 +355,16 @@ func NodeAllowed(subnetID []byte, node interop.PublicKey) bool {
// AddClientAdmin adds new client administrator of the specified group in the specified subnetwork.
// Must be called by owner only.
func AddClientAdmin(subnetID []byte, groupID []byte, adminPublicKey interop.PublicKey) {
// V2 format check
if len(subnetID) != subnetIDSize {
panic("addClientAdmin: " + ErrInvalidSubnetID)
}
// V2 format check
if len(groupID) != groupIDSize {
panic("addClientAdmin: " + ErrInvalidGroupID)
}
if len(adminPublicKey) != interop.PublicKeyCompressedLen {
panic("addClientAdmin: " + ErrInvalidAdmin)
}
@ -350,6 +397,16 @@ func AddClientAdmin(subnetID []byte, groupID []byte, adminPublicKey interop.Publ
// specified group in the specified subnetwork.
// Must be called by owner only.
func RemoveClientAdmin(subnetID []byte, groupID []byte, adminPublicKey interop.PublicKey) {
// V2 format check
if len(subnetID) != subnetIDSize {
panic("removeClientAdmin: " + ErrInvalidSubnetID)
}
// V2 format check
if len(groupID) != groupIDSize {
panic("removeClientAdmin: " + ErrInvalidGroupID)
}
if len(adminPublicKey) != interop.PublicKeyCompressedLen {
panic("removeClientAdmin: " + ErrInvalidAdmin)
}
@ -381,10 +438,21 @@ func RemoveClientAdmin(subnetID []byte, groupID []byte, adminPublicKey interop.P
// AddUser adds user to the specified subnetwork and group.
// Must be called by the owner or the group's admin only.
func AddUser(subnetID []byte, groupID []byte, userID []byte) {
// V2 format check
if len(subnetID) != subnetIDSize {
panic("addUser: " + ErrInvalidSubnetID)
}
// V2 format check
if len(userID) != userIDSize {
panic("addUser: " + ErrInvalidUser)
}
// V2 format check
if len(groupID) != groupIDSize {
panic("addUser: " + ErrInvalidGroupID)
}
ctx := storage.GetContext()
stKey := append([]byte{ownerPrefix}, subnetID...)
@ -415,6 +483,16 @@ func AddUser(subnetID []byte, groupID []byte, userID []byte) {
// RemoveUser removes user from the specified subnetwork and group.
// Must be called by the owner or the group's admin only.
func RemoveUser(subnetID []byte, groupID []byte, userID []byte) {
// V2 format check
if len(subnetID) != subnetIDSize {
panic("removeUser: " + ErrInvalidSubnetID)
}
// V2 format check
if len(groupID) != groupIDSize {
panic("removeUser: " + ErrInvalidGroupID)
}
// V2 format check
if len(userID) != userIDSize {
panic("addUser: " + ErrInvalidUser)
@ -450,6 +528,11 @@ func RemoveUser(subnetID []byte, groupID []byte, userID []byte) {
// UserAllowed returns bool that indicates if node is included in the
// specified subnet or not.
func UserAllowed(subnetID []byte, user []byte) bool {
// V2 format check
if len(subnetID) != subnetIDSize {
panic("userAllowed: " + ErrInvalidSubnetID)
}
ctx := storage.GetContext()
stKey := append([]byte{ownerPrefix}, subnetID...)

View file

@ -209,7 +209,7 @@ func TestSubnet_AddClientAdmin(t *testing.T) {
const method = "addClientAdmin"
groupId := randomBytes(8)
groupId := randomBytes(5)
cOwn := e.WithSigners(owner)
cOwn.InvokeFail(t, method+errSeparator+subnet.ErrInvalidSubnetID, method, []byte{0, 0, 0, 0}, groupId, admPub)
@ -230,7 +230,7 @@ func TestSubnet_RemoveClientAdmin(t *testing.T) {
const method = "removeClientAdmin"
groupId := randomBytes(8)
groupId := randomBytes(5)
cOwn := e.WithSigners(owner)
cOwn.InvokeFail(t, method+errSeparator+subnet.ErrInvalidSubnetID, method, []byte{0, 0, 0, 0}, groupId, admPub)
@ -252,7 +252,7 @@ func TestSubnet_AddUser(t *testing.T) {
user := randomBytes(27)
groupId := randomBytes(8)
groupId := randomBytes(5)
const method = "addUser"
@ -272,7 +272,7 @@ func TestSubnet_RemoveUser(t *testing.T) {
id, owner := createSubnet(t, e)
groupId := randomBytes(8)
groupId := randomBytes(5)
user := randomBytes(27)
adm := e.NewAccount(t)