[#505] morph/container: Add key argument to client wrapper's SetEACL

In recent changes argument list of set eACL call of Container contract
client was extended with binary public key. In the future there will be a
need to pass the table in binary format.

Replace `PutEACL` method with `PutEACLBinary` one which accepts three binary
parameters: eACL table, key and signature. Create `PutEACL` function similar
to the removed method, but accepting `Signature` structure instead of just
a signature. Use this function in Container service server in the place
where `PutEACL` was used.

Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
This commit is contained in:
Leonard Lyubich 2021-05-19 15:04:38 +03:00 committed by Alex Vanin
parent 02079a4f89
commit 395fd187ac
2 changed files with 24 additions and 10 deletions

View file

@ -52,24 +52,36 @@ func (w *Wrapper) GetEACL(cid *containerSDK.ID) (*eacl.Table, *pkg.Signature, er
return table, tableSignature, nil return table, tableSignature, nil
} }
// PutEACL saves the extended ACL table in NeoFS system // PutEACL marshals table, and passes it to Wrapper's PutEACLBinary method
// through Container contract call. // along with sig.Key() and sig.Sign().
// //
// Returns any error encountered that caused the saving to interrupt. // Returns error if table is nil.
func (w *Wrapper) PutEACL(table *eacl.Table, signature []byte) error { func PutEACL(w *Wrapper, table *eacl.Table, sig *pkg.Signature) error {
if table == nil || len(signature) == 0 { if table == nil {
return errNilArgument return errNilArgument
} }
args := client.SetEACLArgs{}
args.SetSignature(signature)
data, err := table.Marshal() data, err := table.Marshal()
if err != nil { if err != nil {
return fmt.Errorf("can't marshal eacl table: %w", err) return fmt.Errorf("can't marshal eacl table: %w", err)
} }
args.SetEACL(data) return w.PutEACLBinary(data, sig.Key(), sig.Sign())
}
// PutEACLBinary save binary eACL table with its key and signature
// in NeoFS system through Container contract call.
//
// Returns any error encountered that caused the saving to interrupt.
func (w *Wrapper) PutEACLBinary(table, key, sig []byte) error {
if len(sig) == 0 || len(key) == 0 {
return errNilArgument
}
args := client.SetEACLArgs{}
args.SetSignature(table)
args.SetPublicKey(key)
args.SetEACL(sig)
return w.client.SetEACL(args) return w.client.SetEACL(args)
} }

View file

@ -4,6 +4,7 @@ import (
"context" "context"
"fmt" "fmt"
"github.com/nspcc-dev/neofs-api-go/pkg"
eaclSDK "github.com/nspcc-dev/neofs-api-go/pkg/acl/eacl" eaclSDK "github.com/nspcc-dev/neofs-api-go/pkg/acl/eacl"
containerSDK "github.com/nspcc-dev/neofs-api-go/pkg/container" containerSDK "github.com/nspcc-dev/neofs-api-go/pkg/container"
"github.com/nspcc-dev/neofs-api-go/pkg/owner" "github.com/nspcc-dev/neofs-api-go/pkg/owner"
@ -88,8 +89,9 @@ func (s *morphExecutor) List(ctx context.Context, body *container.ListRequestBod
func (s *morphExecutor) SetExtendedACL(ctx context.Context, body *container.SetExtendedACLRequestBody) (*container.SetExtendedACLResponseBody, error) { func (s *morphExecutor) SetExtendedACL(ctx context.Context, body *container.SetExtendedACLRequestBody) (*container.SetExtendedACLResponseBody, error) {
table := eaclSDK.NewTableFromV2(body.GetEACL()) table := eaclSDK.NewTableFromV2(body.GetEACL())
sign := pkg.NewSignatureFromV2(body.GetSignature())
err := s.wrapper.PutEACL(table, body.GetSignature().GetSign()) err := wrapper.PutEACL(s.wrapper, table, sign)
return new(container.SetExtendedACLResponseBody), err return new(container.SetExtendedACLResponseBody), err
} }