forked from TrueCloudLab/frostfs-node
[#625] client/container: remove intermediate wrapper
Signed-off-by: Evgenii Stratonikov <evgeniy@nspcc.ru>
This commit is contained in:
parent
819d80a7a9
commit
c34cfa1f35
28 changed files with 556 additions and 1168 deletions
|
@ -4,58 +4,86 @@ import (
|
|||
"fmt"
|
||||
|
||||
"github.com/nspcc-dev/neofs-node/pkg/morph/client"
|
||||
"github.com/nspcc-dev/neofs-sdk-go/eacl"
|
||||
)
|
||||
|
||||
// SetEACLArgs groups the arguments
|
||||
// of set eACL invocation call.
|
||||
type SetEACLArgs struct {
|
||||
eacl []byte // extended ACL table
|
||||
// PutEACL marshals table, and passes it to Wrapper's PutEACLBinary method
|
||||
// along with sig.Key() and sig.Sign().
|
||||
//
|
||||
// Returns error if table is nil.
|
||||
//
|
||||
// If TryNotary is provided, calls notary contract.
|
||||
func PutEACL(c *Client, table *eacl.Table) error {
|
||||
if table == nil {
|
||||
return errNilArgument
|
||||
}
|
||||
|
||||
sig []byte // eACL table signature
|
||||
data, err := table.Marshal()
|
||||
if err != nil {
|
||||
return fmt.Errorf("can't marshal eacl table: %w", err)
|
||||
}
|
||||
|
||||
pubkey []byte // binary public key
|
||||
binToken, err := table.SessionToken().Marshal()
|
||||
if err != nil {
|
||||
return fmt.Errorf("could not marshal session token: %w", err)
|
||||
}
|
||||
|
||||
token []byte // binary session token
|
||||
sig := table.Signature()
|
||||
|
||||
return c.PutEACL(
|
||||
PutEACLPrm{
|
||||
table: data,
|
||||
key: sig.Key(),
|
||||
sig: sig.Sign(),
|
||||
token: binToken,
|
||||
})
|
||||
}
|
||||
|
||||
// PutEACLPrm groups parameters of PutEACL operation.
|
||||
type PutEACLPrm struct {
|
||||
table []byte
|
||||
key []byte
|
||||
sig []byte
|
||||
token []byte
|
||||
|
||||
client.InvokePrmOptional
|
||||
}
|
||||
|
||||
// SetEACL sets the extended ACL table
|
||||
// in a binary format.
|
||||
func (p *SetEACLArgs) SetEACL(v []byte) {
|
||||
p.eacl = v
|
||||
// SetTable sets table.
|
||||
func (p *PutEACLPrm) SetTable(table []byte) {
|
||||
p.table = table
|
||||
}
|
||||
|
||||
// SetSignature sets the eACL table structure
|
||||
// owner's signature.
|
||||
func (p *SetEACLArgs) SetSignature(v []byte) {
|
||||
p.sig = v
|
||||
// SetKey sets key.
|
||||
func (p *PutEACLPrm) SetKey(key []byte) {
|
||||
p.key = key
|
||||
}
|
||||
|
||||
// SetPublicKey sets public key related to
|
||||
// table signature.
|
||||
func (p *SetEACLArgs) SetPublicKey(v []byte) {
|
||||
p.pubkey = v
|
||||
// SetSignature sets signature.
|
||||
func (p *PutEACLPrm) SetSignature(sig []byte) {
|
||||
p.sig = sig
|
||||
}
|
||||
|
||||
// SetSessionToken sets token of the session
|
||||
// within which the eACL table was set
|
||||
// in a binary format.
|
||||
func (p *SetEACLArgs) SetSessionToken(v []byte) {
|
||||
p.token = v
|
||||
// SetToken sets session token.
|
||||
func (p *PutEACLPrm) SetToken(token []byte) {
|
||||
p.token = token
|
||||
}
|
||||
|
||||
// SetEACL invokes the call of set eACL method
|
||||
// of NeoFS Container contract.
|
||||
func (c *Client) SetEACL(args SetEACLArgs) error {
|
||||
// PutEACL saves binary eACL table with its session token, key and signature
|
||||
// in NeoFS system through Container contract call.
|
||||
//
|
||||
// Returns any error encountered that caused the saving to interrupt.
|
||||
func (c *Client) PutEACL(p PutEACLPrm) error {
|
||||
if len(p.sig) == 0 || len(p.key) == 0 {
|
||||
return errNilArgument
|
||||
}
|
||||
|
||||
prm := client.InvokePrm{}
|
||||
|
||||
prm.SetMethod(setEACLMethod)
|
||||
prm.SetArgs(args.eacl, args.sig, args.pubkey, args.token)
|
||||
prm.InvokePrmOptional = args.InvokePrmOptional
|
||||
prm.SetArgs(p.table, p.sig, p.key, p.token)
|
||||
prm.InvokePrmOptional = p.InvokePrmOptional
|
||||
|
||||
err := c.client.Invoke(prm)
|
||||
|
||||
if err != nil {
|
||||
return fmt.Errorf("could not invoke method (%s): %w", setEACLMethod, err)
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue