forked from TrueCloudLab/frostfs-node
[#556] morph/neofsid: Add Client methods to add/remove keys
Implement `AddKeys` / `RemoveKeys` methods to call `addKey` / `removeKey` methods of NeoFS ID contract. Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
This commit is contained in:
parent
8c2d42368a
commit
4713e6b2b8
2 changed files with 97 additions and 0 deletions
63
pkg/morph/client/neofsid/addrm_keys.go
Normal file
63
pkg/morph/client/neofsid/addrm_keys.go
Normal file
|
@ -0,0 +1,63 @@
|
|||
package neofsid
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
)
|
||||
|
||||
// AddKeysArgs groups the arguments
|
||||
// of key binding call.
|
||||
type AddKeysArgs struct {
|
||||
commonBindArgs
|
||||
}
|
||||
|
||||
// RemoveKeysArgs groups the arguments
|
||||
// of key unbinding call.
|
||||
type RemoveKeysArgs struct {
|
||||
commonBindArgs
|
||||
}
|
||||
|
||||
type commonBindArgs struct {
|
||||
ownerID []byte // NeoFS account identifier
|
||||
|
||||
keys [][]byte // list of serialized public keys
|
||||
}
|
||||
|
||||
// SetOwnerID sets NeoFS account identifier.
|
||||
func (x *commonBindArgs) SetOwnerID(v []byte) {
|
||||
x.ownerID = v
|
||||
}
|
||||
|
||||
// SetKeys sets list of public keys in a binary format.
|
||||
func (x *commonBindArgs) SetKeys(v [][]byte) {
|
||||
x.keys = v
|
||||
}
|
||||
|
||||
// AddKeys invokes the call of key adding method
|
||||
// of NeoFS contract.
|
||||
func (x *Client) AddKeys(args AddKeysArgs) error {
|
||||
err := x.client.Invoke(
|
||||
x.addKeysMethod,
|
||||
args.ownerID,
|
||||
args.keys,
|
||||
)
|
||||
if err != nil {
|
||||
return fmt.Errorf("could not invoke method (%s): %w", x.addKeysMethod, err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// RemoveKeys invokes the call of key removing method
|
||||
// of NeoFS contract.
|
||||
func (x *Client) RemoveKeys(args RemoveKeysArgs) error {
|
||||
err := x.client.Invoke(
|
||||
x.removeKeysMethod,
|
||||
args.ownerID,
|
||||
args.keys,
|
||||
)
|
||||
if err != nil {
|
||||
return fmt.Errorf("could not invoke method (%s): %w", x.removeKeysMethod, err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
|
@ -22,15 +22,21 @@ type Client struct {
|
|||
type Option func(*cfg)
|
||||
|
||||
type cfg struct {
|
||||
addKeysMethod,
|
||||
removeKeysMethod,
|
||||
keyListingMethod string
|
||||
}
|
||||
|
||||
const (
|
||||
defaultKeyListingMethod = "key" // default key listing method name
|
||||
defaultAddKeysMethod = "addKey"
|
||||
defaultRemoveKeysMethod = "removeKey"
|
||||
)
|
||||
|
||||
func defaultConfig() *cfg {
|
||||
return &cfg{
|
||||
addKeysMethod: defaultAddKeysMethod,
|
||||
removeKeysMethod: defaultRemoveKeysMethod,
|
||||
keyListingMethod: defaultKeyListingMethod,
|
||||
}
|
||||
}
|
||||
|
@ -76,3 +82,31 @@ func WithKeyListingMethod(n string) Option {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
// WithAddKeysMethod returns a client constructor option that
|
||||
// specifies the method name of adding key operation.
|
||||
//
|
||||
// Ignores empty value.
|
||||
//
|
||||
// If option not provided, "addKey" is used.
|
||||
func WithAddKeysMethod(n string) Option {
|
||||
return func(c *cfg) {
|
||||
if n != "" {
|
||||
c.addKeysMethod = n
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// WithRemoveKeysMethod returns a client constructor option that
|
||||
// specifies the method name of removing key operation.
|
||||
//
|
||||
// Ignores empty value.
|
||||
//
|
||||
// If option not provided, "removeKey" is used.
|
||||
func WithRemoveKeysMethod(n string) Option {
|
||||
return func(c *cfg) {
|
||||
if n != "" {
|
||||
c.removeKeysMethod = n
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue