forked from TrueCloudLab/frostfs-node
[#505] morph/container: Change put container API
Make `Put` method of the wrapper over Container contract's client to accept three binary parameters: container, key and signature. Create `Put` function similar to the previous `Put` variation, but accepting `Signature` structure instead of binary key and signature. Use this function in Container service server in the place where `Put` method was used. Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
This commit is contained in:
parent
9259ae640e
commit
565ad51b42
2 changed files with 34 additions and 16 deletions
|
@ -5,6 +5,7 @@ import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/nspcc-dev/neofs-api-go/pkg"
|
||||||
"github.com/nspcc-dev/neofs-api-go/pkg/container"
|
"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"
|
||||||
v2refs "github.com/nspcc-dev/neofs-api-go/v2/refs"
|
v2refs "github.com/nspcc-dev/neofs-api-go/v2/refs"
|
||||||
|
@ -17,31 +18,48 @@ var (
|
||||||
errUnsupported = errors.New("unsupported structure version")
|
errUnsupported = errors.New("unsupported structure version")
|
||||||
)
|
)
|
||||||
|
|
||||||
// Put saves passed container structure in NeoFS system
|
// Put marshals container, and passes it to Wrapper's Put method
|
||||||
// through Container contract call.
|
// along with sig.Key() and sig.Sign().
|
||||||
//
|
//
|
||||||
// Returns calculated container identifier and any error
|
// Returns error if container is nil.
|
||||||
// encountered that caused the saving to interrupt.
|
func Put(w *Wrapper, cnr *container.Container, sig *pkg.Signature) (*container.ID, error) {
|
||||||
func (w *Wrapper) Put(cnr *container.Container, pubKey, signature []byte) (*container.ID, error) {
|
if cnr == nil {
|
||||||
if cnr == nil || len(pubKey) == 0 || len(signature) == 0 {
|
|
||||||
return nil, errNilArgument
|
return nil, errNilArgument
|
||||||
}
|
}
|
||||||
|
|
||||||
args := client.PutArgs{}
|
|
||||||
args.SetPublicKey(pubKey)
|
|
||||||
args.SetSignature(signature)
|
|
||||||
|
|
||||||
id := container.NewID()
|
|
||||||
|
|
||||||
data, err := cnr.Marshal()
|
data, err := cnr.Marshal()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("can't marshal container: %w", err)
|
return nil, fmt.Errorf("can't marshal container: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
id.SetSHA256(sha256.Sum256(data))
|
return w.Put(data, sig.Key(), sig.Sign())
|
||||||
args.SetContainer(data)
|
}
|
||||||
|
|
||||||
return id, w.client.Put(args)
|
// Put saves binary container with its key and signature
|
||||||
|
// in NeoFS system through Container contract call.
|
||||||
|
//
|
||||||
|
// Returns calculated container identifier and any error
|
||||||
|
// encountered that caused the saving to interrupt.
|
||||||
|
func (w *Wrapper) Put(cnr, key, sig []byte) (*container.ID, error) {
|
||||||
|
if len(sig) == 0 || len(key) == 0 {
|
||||||
|
return nil, errNilArgument
|
||||||
|
}
|
||||||
|
|
||||||
|
var args client.PutArgs
|
||||||
|
|
||||||
|
args.SetContainer(cnr)
|
||||||
|
args.SetSignature(sig)
|
||||||
|
args.SetPublicKey(key)
|
||||||
|
|
||||||
|
err := w.client.Put(args)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
id := container.NewID()
|
||||||
|
id.SetSHA256(sha256.Sum256(cnr))
|
||||||
|
|
||||||
|
return id, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get reads the container from NeoFS system by identifier
|
// Get reads the container from NeoFS system by identifier
|
||||||
|
|
|
@ -32,7 +32,7 @@ func (s *morphExecutor) Put(ctx context.Context, body *container.PutRequestBody)
|
||||||
|
|
||||||
sig := body.GetSignature()
|
sig := body.GetSignature()
|
||||||
|
|
||||||
cid, err := s.wrapper.Put(cnr, sig.GetKey(), sig.GetSign())
|
cid, err := wrapper.Put(s.wrapper, cnr, pkg.NewSignatureFromV2(sig))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue