From f16c374ceee1f570a9fda28993c2b57b2ceb87bb Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Tue, 25 Feb 2020 13:38:20 +0100 Subject: [PATCH 1/8] Update secret not found error message --- pkg/secrethub/secret_version.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/pkg/secrethub/secret_version.go b/pkg/secrethub/secret_version.go index 8d13c827..4d193913 100644 --- a/pkg/secrethub/secret_version.go +++ b/pkg/secrethub/secret_version.go @@ -21,6 +21,7 @@ var ( ErrSecretTooBig = errClient.Code("secret_too_big").Error(fmt.Sprintf("maximum size of a secret is %s", units.BytesSize(MaxSecretSize))) ErrEmptySecret = errClient.Code("empty_secret").Error("secret is empty") ErrCannotWriteToVersion = errClient.Code("cannot_write_version").Error("cannot (over)write a specific secret version, they are append only") + ErrSecretNotFound = errClient.Code("secret_not_found").ErrorPref("cannot find secret: %s, error: %v") ) // SecretVersionService handles operations on secret versions from SecretHub. @@ -115,7 +116,13 @@ func (s secretVersionService) GetWithData(path string) (*api.SecretVersion, erro return nil, errio.Error(err) } - return s.get(secretPath, true) + secretVersion, err := s.get(secretPath, true) + if api.IsErrNotFound(err) { + return nil, ErrSecretNotFound(path, err) + } else if err != nil { + return nil, err + } + return secretVersion, nil } // GetWithoutData gets a secret version, without the sensitive data. From 1dce0fb142c8e8132a936fd90c74221c9cc182d4 Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Wed, 26 Feb 2020 17:09:27 +0100 Subject: [PATCH 2/8] Change secret not found error to a status error --- pkg/secrethub/secret_version.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkg/secrethub/secret_version.go b/pkg/secrethub/secret_version.go index 4d193913..e8dc42df 100644 --- a/pkg/secrethub/secret_version.go +++ b/pkg/secrethub/secret_version.go @@ -2,6 +2,7 @@ package secrethub import ( "fmt" + "net/http" "github.com/secrethub/secrethub-go/pkg/secrethub/iterator" @@ -21,7 +22,7 @@ var ( ErrSecretTooBig = errClient.Code("secret_too_big").Error(fmt.Sprintf("maximum size of a secret is %s", units.BytesSize(MaxSecretSize))) ErrEmptySecret = errClient.Code("empty_secret").Error("secret is empty") ErrCannotWriteToVersion = errClient.Code("cannot_write_version").Error("cannot (over)write a specific secret version, they are append only") - ErrSecretNotFound = errClient.Code("secret_not_found").ErrorPref("cannot find secret: %s, error: %v") + ErrSecretNotFound = errClient.Code("secret_not_found").StatusErrorPref("cannot find secret: %s, error: %v", http.StatusNotFound) ) // SecretVersionService handles operations on secret versions from SecretHub. From 8a57efd8cd3196ea913736cc47093d08ec39de40 Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Wed, 26 Feb 2020 18:52:45 +0100 Subject: [PATCH 3/8] Update secret not found error wrapping --- pkg/secrethub/secret_version.go | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/pkg/secrethub/secret_version.go b/pkg/secrethub/secret_version.go index e8dc42df..090fa578 100644 --- a/pkg/secrethub/secret_version.go +++ b/pkg/secrethub/secret_version.go @@ -2,8 +2,6 @@ package secrethub import ( "fmt" - "net/http" - "github.com/secrethub/secrethub-go/pkg/secrethub/iterator" units "github.com/docker/go-units" @@ -22,7 +20,7 @@ var ( ErrSecretTooBig = errClient.Code("secret_too_big").Error(fmt.Sprintf("maximum size of a secret is %s", units.BytesSize(MaxSecretSize))) ErrEmptySecret = errClient.Code("empty_secret").Error("secret is empty") ErrCannotWriteToVersion = errClient.Code("cannot_write_version").Error("cannot (over)write a specific secret version, they are append only") - ErrSecretNotFound = errClient.Code("secret_not_found").StatusErrorPref("cannot find secret: %s, error: %v", http.StatusNotFound) + ErrSecretNotFound = errClient.Code("secret_not_found").ErrorPref("cannot find secret: \"%s\": %v") ) // SecretVersionService handles operations on secret versions from SecretHub. @@ -82,7 +80,9 @@ func (s secretVersionService) Delete(path string) error { // get gets a version of a secret. withData specifies whether the encrypted data should be retrieved. func (s secretVersionService) get(path api.SecretPath, withData bool) (*api.SecretVersion, error) { blindName, err := s.client.convertPathToBlindName(path) - if err != nil { + if api.IsErrNotFound(err) { + return nil, ErrSecretNotFound(path, err) + } else if err != nil { return nil, errio.Error(err) } @@ -97,7 +97,9 @@ func (s secretVersionService) get(path api.SecretPath, withData bool) (*api.Secr } encVersion, err := s.client.httpClient.GetSecretVersion(blindName, versionParam, withData) - if err != nil { + if api.IsErrNotFound(err) { + return nil, ErrSecretNotFound(path, err) + } else if err != nil { return nil, errio.Error(err) } @@ -117,13 +119,7 @@ func (s secretVersionService) GetWithData(path string) (*api.SecretVersion, erro return nil, errio.Error(err) } - secretVersion, err := s.get(secretPath, true) - if api.IsErrNotFound(err) { - return nil, ErrSecretNotFound(path, err) - } else if err != nil { - return nil, err - } - return secretVersion, nil + return s.get(secretPath, true) } // GetWithoutData gets a secret version, without the sensitive data. From ae32fec19de0f8bf1b5196347485070d333466cf Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Tue, 3 Mar 2020 10:57:40 +0100 Subject: [PATCH 4/8] Update api.IsErrNotFound to check for secret not found errors --- internals/api/server_errors.go | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/internals/api/server_errors.go b/internals/api/server_errors.go index 2908d7e3..9fb3a522 100644 --- a/internals/api/server_errors.go +++ b/internals/api/server_errors.go @@ -104,9 +104,14 @@ var ( // IsErrNotFound returns whether the given error is caused by a un-existing resource. func IsErrNotFound(err error) bool { - statusError, ok := err.(errio.PublicStatusError) + publicError, ok := err.(errio.PublicError) + if ok { + return publicError.Namespace == errio.Namespace("client") && publicError.Code == "secret_not_found" + } + + publicStatusError, ok := err.(errio.PublicStatusError) if !ok { return false } - return statusError.StatusCode == 404 + return publicStatusError.StatusCode == 404 } From daea8df559835e8dae4ee8391d6f85aabc0327d6 Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Wed, 4 Mar 2020 13:50:15 +0100 Subject: [PATCH 5/8] Update SecretNotFoundError --- internals/api/server_errors.go | 9 +++------ pkg/secrethub/secret_version.go | 18 +++++++++++++++--- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/internals/api/server_errors.go b/internals/api/server_errors.go index 9fb3a522..15c633c6 100644 --- a/internals/api/server_errors.go +++ b/internals/api/server_errors.go @@ -1,6 +1,7 @@ package api import ( + "errors" "net/http" "fmt" @@ -104,12 +105,8 @@ var ( // IsErrNotFound returns whether the given error is caused by a un-existing resource. func IsErrNotFound(err error) bool { - publicError, ok := err.(errio.PublicError) - if ok { - return publicError.Namespace == errio.Namespace("client") && publicError.Code == "secret_not_found" - } - - publicStatusError, ok := err.(errio.PublicStatusError) + var publicStatusError errio.PublicStatusError + ok := errors.As(err, &publicStatusError) if !ok { return false } diff --git a/pkg/secrethub/secret_version.go b/pkg/secrethub/secret_version.go index 090fa578..0a45ae13 100644 --- a/pkg/secrethub/secret_version.go +++ b/pkg/secrethub/secret_version.go @@ -20,9 +20,21 @@ var ( ErrSecretTooBig = errClient.Code("secret_too_big").Error(fmt.Sprintf("maximum size of a secret is %s", units.BytesSize(MaxSecretSize))) ErrEmptySecret = errClient.Code("empty_secret").Error("secret is empty") ErrCannotWriteToVersion = errClient.Code("cannot_write_version").Error("cannot (over)write a specific secret version, they are append only") - ErrSecretNotFound = errClient.Code("secret_not_found").ErrorPref("cannot find secret: \"%s\": %v") ) +type errSecretNotFound struct { + path api.SecretPath + err error +} + +func (e *errSecretNotFound) Error() string { + return fmt.Sprintf("cannot find secret: \"%s\": %v", e.path, e.err) +} + +func (e *errSecretNotFound) Unwrap() error { + return e.err +} + // SecretVersionService handles operations on secret versions from SecretHub. type SecretVersionService interface { // GetWithData gets a secret version, with the sensitive data. @@ -81,7 +93,7 @@ func (s secretVersionService) Delete(path string) error { func (s secretVersionService) get(path api.SecretPath, withData bool) (*api.SecretVersion, error) { blindName, err := s.client.convertPathToBlindName(path) if api.IsErrNotFound(err) { - return nil, ErrSecretNotFound(path, err) + return nil, &errSecretNotFound{path:path, err:err} } else if err != nil { return nil, errio.Error(err) } @@ -98,7 +110,7 @@ func (s secretVersionService) get(path api.SecretPath, withData bool) (*api.Secr encVersion, err := s.client.httpClient.GetSecretVersion(blindName, versionParam, withData) if api.IsErrNotFound(err) { - return nil, ErrSecretNotFound(path, err) + return nil, &errSecretNotFound{path:path, err:err} } else if err != nil { return nil, errio.Error(err) } From 0cc8bde1ca0eebcd47caf146d162cfc7b9b3109e Mon Sep 17 00:00:00 2001 From: Simon Barendse Date: Wed, 4 Mar 2020 14:27:50 +0100 Subject: [PATCH 6/8] goimports Co-Authored-By: Bot from GolangCI <42910462+golangcibot@users.noreply.github.com> --- pkg/secrethub/secret_version.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/secrethub/secret_version.go b/pkg/secrethub/secret_version.go index 0a45ae13..eb5fbc50 100644 --- a/pkg/secrethub/secret_version.go +++ b/pkg/secrethub/secret_version.go @@ -24,7 +24,7 @@ var ( type errSecretNotFound struct { path api.SecretPath - err error + err error } func (e *errSecretNotFound) Error() string { From f0950a784271ec613eba2b40298845eeeb8ade50 Mon Sep 17 00:00:00 2001 From: Simon Barendse Date: Wed, 4 Mar 2020 14:36:09 +0100 Subject: [PATCH 7/8] gofmt Co-Authored-By: Bot from GolangCI <42910462+golangcibot@users.noreply.github.com> --- pkg/secrethub/secret_version.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/secrethub/secret_version.go b/pkg/secrethub/secret_version.go index eb5fbc50..524eb618 100644 --- a/pkg/secrethub/secret_version.go +++ b/pkg/secrethub/secret_version.go @@ -93,7 +93,7 @@ func (s secretVersionService) Delete(path string) error { func (s secretVersionService) get(path api.SecretPath, withData bool) (*api.SecretVersion, error) { blindName, err := s.client.convertPathToBlindName(path) if api.IsErrNotFound(err) { - return nil, &errSecretNotFound{path:path, err:err} + return nil, &errSecretNotFound{path: path, err: err} } else if err != nil { return nil, errio.Error(err) } From b6684c009f1bc4acc496a668f6589560d868f44f Mon Sep 17 00:00:00 2001 From: Simon Barendse Date: Wed, 4 Mar 2020 14:38:28 +0100 Subject: [PATCH 8/8] gofmt Co-Authored-By: Bot from GolangCI <42910462+golangcibot@users.noreply.github.com> --- pkg/secrethub/secret_version.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/secrethub/secret_version.go b/pkg/secrethub/secret_version.go index 524eb618..1c1d2c1c 100644 --- a/pkg/secrethub/secret_version.go +++ b/pkg/secrethub/secret_version.go @@ -110,7 +110,7 @@ func (s secretVersionService) get(path api.SecretPath, withData bool) (*api.Secr encVersion, err := s.client.httpClient.GetSecretVersion(blindName, versionParam, withData) if api.IsErrNotFound(err) { - return nil, &errSecretNotFound{path:path, err:err} + return nil, &errSecretNotFound{path: path, err: err} } else if err != nil { return nil, errio.Error(err) }