[#367] client: Allow to override key in Object.Hash RPC

Signed-off-by: Evgenii Stratonikov <evgeniy@nspcc.ru>
Signed-off-by: Evgenii Stratonikov <e.stratonikov@yadro.com>
This commit is contained in:
Evgenii Stratonikov 2022-11-22 19:22:00 +03:00 committed by Evgenii Stratonikov
parent b7286df70c
commit 11e2f2b013

View file

@ -2,6 +2,7 @@ package client
import ( import (
"context" "context"
"crypto/ecdsa"
"fmt" "fmt"
"github.com/TrueCloudLab/frostfs-api-go/v2/acl" "github.com/TrueCloudLab/frostfs-api-go/v2/acl"
@ -27,6 +28,16 @@ type PrmObjectHash struct {
csAlgo v2refs.ChecksumType csAlgo v2refs.ChecksumType
addr v2refs.Address addr v2refs.Address
keySet bool
key ecdsa.PrivateKey
}
// UseKey specifies private key to sign the requests.
// If key is not provided, then Client default key is used.
func (x *PrmObjectHash) UseKey(key ecdsa.PrivateKey) {
x.keySet = true
x.key = key
} }
// MarkLocal tells the server to execute the operation locally. // MarkLocal tells the server to execute the operation locally.
@ -176,7 +187,12 @@ func (c *Client) ObjectHash(ctx context.Context, prm PrmObjectHash) (*ResObjectH
c.prepareRequest(&req, &prm.meta) c.prepareRequest(&req, &prm.meta)
req.SetBody(&prm.body) req.SetBody(&prm.body)
err := signature.SignServiceMessage(&c.prm.key, &req) key := c.prm.key
if prm.keySet {
key = prm.key
}
err := signature.SignServiceMessage(&key, &req)
if err != nil { if err != nil {
return nil, fmt.Errorf("sign request: %w", err) return nil, fmt.Errorf("sign request: %w", err)
} }