[#525] morph/container: Do not return signature from GetEACL method

In previous implementation wrapper over the Container contract's client
returned the signature of the eACL table in addition to itself. After recent
changes in API Go lib table carries its signature. Thus, it is redundant to
return the table signature separately.

Make `Wrapper.GetEACL` method to return only `eacl.Table` with error.

Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
This commit is contained in:
Leonard Lyubich 2021-05-25 18:18:32 +03:00 committed by Leonard Lyubich
parent 615813d6de
commit df197dc38b
3 changed files with 14 additions and 10 deletions

View file

@ -371,11 +371,13 @@ func (s *signedEACLTable) SignedDataSize() int {
} }
func (s *morphEACLStorage) GetEACL(cid *container.ID) (*eaclSDK.Table, error) { func (s *morphEACLStorage) GetEACL(cid *container.ID) (*eaclSDK.Table, error) {
table, sig, err := s.w.GetEACL(cid) table, err := s.w.GetEACL(cid)
if err != nil { if err != nil {
return nil, err return nil, err
} }
sig := table.Signature()
if err := signature.VerifyDataWithSource( if err := signature.VerifyDataWithSource(
(*signedEACLTable)(table), (*signedEACLTable)(table),
func() ([]byte, []byte) { func() ([]byte, []byte) {

View file

@ -12,23 +12,23 @@ import (
// GetEACL reads the extended ACL table from NeoFS system // GetEACL reads the extended ACL table from NeoFS system
// through Container contract call. // through Container contract call.
func (w *Wrapper) GetEACL(cid *containerSDK.ID) (*eacl.Table, *pkg.Signature, error) { func (w *Wrapper) GetEACL(cid *containerSDK.ID) (*eacl.Table, error) {
if cid == nil { if cid == nil {
return nil, nil, errNilArgument return nil, errNilArgument
} }
args := client.EACLArgs{} args := client.EACLArgs{}
v2 := cid.ToV2() v2 := cid.ToV2()
if v2 == nil { if v2 == nil {
return nil, nil, errUnsupported // use other major version if there any return nil, errUnsupported // use other major version if there any
} }
args.SetCID(v2.GetValue()) args.SetCID(v2.GetValue())
rpcAnswer, err := w.client.EACL(args) rpcAnswer, err := w.client.EACL(args)
if err != nil { if err != nil {
return nil, nil, err return nil, err
} }
// Client may not return errors if the table is missing, so check this case additionally. // Client may not return errors if the table is missing, so check this case additionally.
@ -36,7 +36,7 @@ func (w *Wrapper) GetEACL(cid *containerSDK.ID) (*eacl.Table, *pkg.Signature, er
// since unsigned table cannot be approved in the storage by design. // since unsigned table cannot be approved in the storage by design.
sig := rpcAnswer.Signature() sig := rpcAnswer.Signature()
if len(sig) == 0 { if len(sig) == 0 {
return nil, nil, container.ErrEACLNotFound return nil, container.ErrEACLNotFound
} }
tableSignature := pkg.NewSignature() tableSignature := pkg.NewSignature()
@ -46,10 +46,12 @@ func (w *Wrapper) GetEACL(cid *containerSDK.ID) (*eacl.Table, *pkg.Signature, er
table := eacl.NewTable() table := eacl.NewTable()
if err = table.Unmarshal(rpcAnswer.EACL()); err != nil { if err = table.Unmarshal(rpcAnswer.EACL()); err != nil {
// use other major version if there any // use other major version if there any
return nil, nil, err return nil, err
} }
return table, tableSignature, nil table.SetSignature(tableSignature)
return table, nil
} }
// PutEACL marshals table, and passes it to Wrapper's PutEACLBinary method // PutEACL marshals table, and passes it to Wrapper's PutEACLBinary method

View file

@ -102,14 +102,14 @@ func (s *morphExecutor) SetExtendedACL(ctx context.Context, body *container.SetE
func (s *morphExecutor) GetExtendedACL(ctx context.Context, body *container.GetExtendedACLRequestBody) (*container.GetExtendedACLResponseBody, error) { func (s *morphExecutor) GetExtendedACL(ctx context.Context, body *container.GetExtendedACLRequestBody) (*container.GetExtendedACLResponseBody, error) {
cid := containerSDK.NewIDFromV2(body.GetContainerID()) cid := containerSDK.NewIDFromV2(body.GetContainerID())
table, signature, err := s.wrapper.GetEACL(cid) table, err := s.wrapper.GetEACL(cid)
if err != nil { if err != nil {
return nil, err return nil, err
} }
res := new(container.GetExtendedACLResponseBody) res := new(container.GetExtendedACLResponseBody)
res.SetEACL(table.ToV2()) res.SetEACL(table.ToV2())
res.SetSignature(signature.ToV2()) res.SetSignature(table.Signature().ToV2())
res.SetSessionToken(table.SessionToken().ToV2()) res.SetSessionToken(table.SessionToken().ToV2())
return res, nil return res, nil