forked from TrueCloudLab/frostfs-api-go
service: change constant errors
This commit: * moves defined errors to a separate file; * renames ErrEmptyToken to ErrNilToken; * merges ErrZeroTTL and ErrIncorrectTTL into single ErrInvalidTTL.
This commit is contained in:
parent
e3cab218dc
commit
fc177c4ce3
6 changed files with 31 additions and 37 deletions
18
service/errors.go
Normal file
18
service/errors.go
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
package service
|
||||||
|
|
||||||
|
import "github.com/nspcc-dev/neofs-api-go/internal"
|
||||||
|
|
||||||
|
// ErrNilToken is returned by functions that expect a non-nil token argument, but received nil.
|
||||||
|
const ErrNilToken = internal.Error("token is nil")
|
||||||
|
|
||||||
|
// ErrInvalidTTL means that the TTL value does not satisfy a specific criterion.
|
||||||
|
const ErrInvalidTTL = internal.Error("invalid TTL value")
|
||||||
|
|
||||||
|
// ErrInvalidPublicKeyBytes means that the public key could not be unmarshaled.
|
||||||
|
const ErrInvalidPublicKeyBytes = internal.Error("cannot load public key")
|
||||||
|
|
||||||
|
// ErrCannotFindOwner is raised when signatures empty in GetOwner.
|
||||||
|
const ErrCannotFindOwner = internal.Error("cannot find owner public key")
|
||||||
|
|
||||||
|
// ErrWrongOwner is raised when passed OwnerID not equal to present PublicKey
|
||||||
|
const ErrWrongOwner = internal.Error("wrong owner")
|
|
@ -1,7 +1,6 @@
|
||||||
package service
|
package service
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/nspcc-dev/neofs-api-go/internal"
|
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"google.golang.org/grpc/codes"
|
"google.golang.org/grpc/codes"
|
||||||
"google.golang.org/grpc/status"
|
"google.golang.org/grpc/status"
|
||||||
|
@ -63,14 +62,6 @@ const (
|
||||||
SingleForwardingTTL
|
SingleForwardingTTL
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
|
||||||
// ErrZeroTTL is raised when zero ttl is passed.
|
|
||||||
ErrZeroTTL = internal.Error("zero ttl")
|
|
||||||
|
|
||||||
// ErrIncorrectTTL is raised when NonForwardingTTL is passed and NodeRole != InnerRingNode.
|
|
||||||
ErrIncorrectTTL = internal.Error("incorrect ttl")
|
|
||||||
)
|
|
||||||
|
|
||||||
// SetVersion sets protocol version to ResponseMetaHeader.
|
// SetVersion sets protocol version to ResponseMetaHeader.
|
||||||
func (m *ResponseMetaHeader) SetVersion(v uint32) { m.Version = v }
|
func (m *ResponseMetaHeader) SetVersion(v uint32) { m.Version = v }
|
||||||
|
|
||||||
|
@ -105,7 +96,7 @@ func (m *RequestMetaHeader) RestoreMeta(v RequestMetaHeader) { *m = v }
|
||||||
func IRNonForwarding(role NodeRole) TTLCondition {
|
func IRNonForwarding(role NodeRole) TTLCondition {
|
||||||
return func(ttl uint32) error {
|
return func(ttl uint32) error {
|
||||||
if ttl == NonForwardingTTL && role != InnerRingNode {
|
if ttl == NonForwardingTTL && role != InnerRingNode {
|
||||||
return ErrIncorrectTTL
|
return ErrInvalidTTL
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
@ -117,7 +108,7 @@ func ProcessRequestTTL(req MetaHeader, cond ...TTLCondition) error {
|
||||||
ttl := req.GetTTL()
|
ttl := req.GetTTL()
|
||||||
|
|
||||||
if ttl == ZeroTTL {
|
if ttl == ZeroTTL {
|
||||||
return status.New(codes.InvalidArgument, ErrZeroTTL.Error()).Err()
|
return status.New(codes.InvalidArgument, ErrInvalidTTL.Error()).Err()
|
||||||
}
|
}
|
||||||
|
|
||||||
for i := range cond {
|
for i := range cond {
|
||||||
|
|
|
@ -26,13 +26,13 @@ func TestMetaRequest(t *testing.T) {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
code: codes.InvalidArgument,
|
code: codes.InvalidArgument,
|
||||||
msg: ErrIncorrectTTL.Error(),
|
msg: ErrInvalidTTL.Error(),
|
||||||
name: "direct to storage node",
|
name: "direct to storage node",
|
||||||
handler: IRNonForwarding(StorageNode),
|
handler: IRNonForwarding(StorageNode),
|
||||||
RequestMetaHeader: RequestMetaHeader{TTL: NonForwardingTTL},
|
RequestMetaHeader: RequestMetaHeader{TTL: NonForwardingTTL},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
msg: ErrZeroTTL.Error(),
|
msg: ErrInvalidTTL.Error(),
|
||||||
code: codes.InvalidArgument,
|
code: codes.InvalidArgument,
|
||||||
name: "zero ttl",
|
name: "zero ttl",
|
||||||
handler: IRNonForwarding(StorageNode),
|
handler: IRNonForwarding(StorageNode),
|
||||||
|
|
|
@ -4,7 +4,6 @@ import (
|
||||||
"crypto/ecdsa"
|
"crypto/ecdsa"
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
|
|
||||||
"github.com/nspcc-dev/neofs-api-go/internal"
|
|
||||||
"github.com/nspcc-dev/neofs-api-go/refs"
|
"github.com/nspcc-dev/neofs-api-go/refs"
|
||||||
crypto "github.com/nspcc-dev/neofs-crypto"
|
crypto "github.com/nspcc-dev/neofs-crypto"
|
||||||
)
|
)
|
||||||
|
@ -62,9 +61,6 @@ type SessionToken interface {
|
||||||
SignatureContainer
|
SignatureContainer
|
||||||
}
|
}
|
||||||
|
|
||||||
// ErrEmptyToken is raised when passed Token is nil.
|
|
||||||
const ErrEmptyToken = internal.Error("token is empty")
|
|
||||||
|
|
||||||
var _ SessionToken = (*Token)(nil)
|
var _ SessionToken = (*Token)(nil)
|
||||||
|
|
||||||
var tokenEndianness = binary.BigEndian
|
var tokenEndianness = binary.BigEndian
|
||||||
|
@ -183,11 +179,11 @@ func verificationTokenData(token SessionToken) []byte {
|
||||||
|
|
||||||
// SignToken calculates and stores the signature of token information.
|
// SignToken calculates and stores the signature of token information.
|
||||||
//
|
//
|
||||||
// If passed token is nil, ErrEmptyToken returns.
|
// If passed token is nil, ErrNilToken returns.
|
||||||
// If passed private key is nil, crypto.ErrEmptyPrivateKey returns.
|
// If passed private key is nil, crypto.ErrEmptyPrivateKey returns.
|
||||||
func SignToken(token SessionToken, key *ecdsa.PrivateKey) error {
|
func SignToken(token SessionToken, key *ecdsa.PrivateKey) error {
|
||||||
if token == nil {
|
if token == nil {
|
||||||
return ErrEmptyToken
|
return ErrNilToken
|
||||||
} else if key == nil {
|
} else if key == nil {
|
||||||
return crypto.ErrEmptyPrivateKey
|
return crypto.ErrEmptyPrivateKey
|
||||||
}
|
}
|
||||||
|
@ -204,11 +200,11 @@ func SignToken(token SessionToken, key *ecdsa.PrivateKey) error {
|
||||||
|
|
||||||
// VerifyTokenSignature checks if token was signed correctly.
|
// VerifyTokenSignature checks if token was signed correctly.
|
||||||
//
|
//
|
||||||
// If passed token is nil, ErrEmptyToken returns.
|
// If passed token is nil, ErrNilToken returns.
|
||||||
// If passed public key is nil, crypto.ErrEmptyPublicKey returns.
|
// If passed public key is nil, crypto.ErrEmptyPublicKey returns.
|
||||||
func VerifyTokenSignature(token SessionToken, key *ecdsa.PublicKey) error {
|
func VerifyTokenSignature(token SessionToken, key *ecdsa.PublicKey) error {
|
||||||
if token == nil {
|
if token == nil {
|
||||||
return ErrEmptyToken
|
return ErrNilToken
|
||||||
} else if key == nil {
|
} else if key == nil {
|
||||||
return crypto.ErrEmptyPublicKey
|
return crypto.ErrEmptyPublicKey
|
||||||
}
|
}
|
||||||
|
|
|
@ -93,12 +93,12 @@ func TestSignToken(t *testing.T) {
|
||||||
// nil token
|
// nil token
|
||||||
require.EqualError(t,
|
require.EqualError(t,
|
||||||
SignToken(nil, nil),
|
SignToken(nil, nil),
|
||||||
ErrEmptyToken.Error(),
|
ErrNilToken.Error(),
|
||||||
)
|
)
|
||||||
|
|
||||||
require.EqualError(t,
|
require.EqualError(t,
|
||||||
VerifyTokenSignature(nil, nil),
|
VerifyTokenSignature(nil, nil),
|
||||||
ErrEmptyToken.Error(),
|
ErrNilToken.Error(),
|
||||||
)
|
)
|
||||||
|
|
||||||
var token SessionToken = new(Token)
|
var token SessionToken = new(Token)
|
||||||
|
|
|
@ -35,17 +35,6 @@ type (
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
|
||||||
// ErrCannotLoadPublicKey is raised when cannot unmarshal public key from RequestVerificationHeader_Sign.
|
|
||||||
ErrCannotLoadPublicKey = internal.Error("cannot load public key")
|
|
||||||
|
|
||||||
// ErrCannotFindOwner is raised when signatures empty in GetOwner.
|
|
||||||
ErrCannotFindOwner = internal.Error("cannot find owner public key")
|
|
||||||
|
|
||||||
// ErrWrongOwner is raised when passed OwnerID not equal to present PublicKey
|
|
||||||
ErrWrongOwner = internal.Error("wrong owner")
|
|
||||||
)
|
|
||||||
|
|
||||||
// SetSignatures replaces signatures stored in RequestVerificationHeader.
|
// SetSignatures replaces signatures stored in RequestVerificationHeader.
|
||||||
func (m *RequestVerificationHeader) SetSignatures(signatures []*RequestVerificationHeader_Signature) {
|
func (m *RequestVerificationHeader) SetSignatures(signatures []*RequestVerificationHeader_Signature) {
|
||||||
m.Signatures = signatures
|
m.Signatures = signatures
|
||||||
|
@ -81,7 +70,7 @@ func (m *RequestVerificationHeader) GetOwner() (*ecdsa.PublicKey, error) {
|
||||||
return key, nil
|
return key, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil, ErrCannotLoadPublicKey
|
return nil, ErrInvalidPublicKeyBytes
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetLastPeer tries to get last peer public key from signatures.
|
// GetLastPeer tries to get last peer public key from signatures.
|
||||||
|
@ -99,7 +88,7 @@ func (m *RequestVerificationHeader) GetLastPeer() (*ecdsa.PublicKey, error) {
|
||||||
return key, nil
|
return key, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil, ErrCannotLoadPublicKey
|
return nil, ErrInvalidPublicKeyBytes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -190,7 +179,7 @@ func VerifyRequestHeader(msg VerifiableRequest) error {
|
||||||
|
|
||||||
key := crypto.UnmarshalPublicKey(peer)
|
key := crypto.UnmarshalPublicKey(peer)
|
||||||
if key == nil {
|
if key == nil {
|
||||||
return errors.Wrapf(ErrCannotLoadPublicKey, "%d: %02x", i, peer)
|
return errors.Wrapf(ErrInvalidPublicKeyBytes, "%d: %02x", i, peer)
|
||||||
}
|
}
|
||||||
|
|
||||||
if size := msg.Size(); size <= cap(data) {
|
if size := msg.Size(); size <= cap(data) {
|
||||||
|
|
Loading…
Reference in a new issue