Skip to content

Commit

Permalink
fix(errors): restore matching against all original errors (#213)
Browse files Browse the repository at this point in the history
I missed an error origination point that needed to be converted to
the new format. Also, this is maybe overly cautious but I added
back in the original error instances as native caused by errors
for all instances. Before, I intentionally left alone places that
held an error origination from `fmt.Errorf()` because I don't know
that users can really match against those, but I figured we might as
well be as compatibility-friendly as we can be, since it doesn't cost
us anything.

Signed-off-by: Dustin Popp <dpopp07@gmail.com>
  • Loading branch information
dpopp07 committed Mar 21, 2024
1 parent ef85f6c commit 005fdb8
Show file tree
Hide file tree
Showing 13 changed files with 118 additions and 84 deletions.
12 changes: 8 additions & 4 deletions core/base_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -85,11 +85,13 @@ type BaseService struct {
// parameters and service options will be performed before instance creation.
func NewBaseService(options *ServiceOptions) (*BaseService, error) {
if HasBadFirstOrLastChar(options.URL) {
return nil, SDKErrorf(nil, fmt.Sprintf(ERRORMSG_PROP_INVALID, "URL"), "bad-char", getComponentInfo())
err := fmt.Errorf(ERRORMSG_PROP_INVALID, "URL")
return nil, SDKErrorf(err, "", "bad-char", getComponentInfo())
}

if IsNil(options.Authenticator) {
return nil, SDKErrorf(nil, ERRORMSG_NO_AUTHENTICATOR, "missing-auth", getComponentInfo())
err := fmt.Errorf(ERRORMSG_NO_AUTHENTICATOR)
return nil, SDKErrorf(err, "", "missing-auth", getComponentInfo())
}

if err := options.Authenticator.Validate(); err != nil {
Expand Down Expand Up @@ -214,7 +216,8 @@ func (service *BaseService) SetURL(url string) error {
// SetServiceURL sets the service URL.
func (service *BaseService) SetServiceURL(url string) error {
if HasBadFirstOrLastChar(url) {
return SDKErrorf(nil, fmt.Sprintf(ERRORMSG_PROP_INVALID, "URL"), "bad-char", getComponentInfo())
err := fmt.Errorf(ERRORMSG_PROP_INVALID, "URL")
return SDKErrorf(err, "", "bad-char", getComponentInfo())
}

service.Options.URL = url
Expand Down Expand Up @@ -375,7 +378,8 @@ func (service *BaseService) Request(req *http.Request, result interface{}) (deta

// Add authentication to the outbound request.
if IsNil(service.Options.Authenticator) {
err = SDKErrorf(nil, ERRORMSG_NO_AUTHENTICATOR, "missing-auth", getComponentInfo())
err = fmt.Errorf(ERRORMSG_NO_AUTHENTICATOR)
err = SDKErrorf(err, "", "missing-auth", getComponentInfo())
return
}

Expand Down
15 changes: 10 additions & 5 deletions core/basic_authenticator.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,8 @@ func NewBasicAuthenticator(username string, password string) (*BasicAuthenticato
// from a map.
func newBasicAuthenticatorFromMap(properties map[string]string) (*BasicAuthenticator, error) {
if properties == nil {
return nil, SDKErrorf(nil, ERRORMSG_PROPS_MAP_NIL, "missing-props", getComponentInfo())
err := fmt.Errorf(ERRORMSG_PROPS_MAP_NIL)
return nil, SDKErrorf(err, "", "missing-props", getComponentInfo())
}

return NewBasicAuthenticator(properties[PROPNAME_USERNAME], properties[PROPNAME_PASSWORD])
Expand All @@ -74,19 +75,23 @@ func (this *BasicAuthenticator) Authenticate(request *http.Request) error {
// they do not contain invalid characters.
func (this BasicAuthenticator) Validate() error {
if this.Username == "" {
return SDKErrorf(nil, fmt.Sprintf(ERRORMSG_PROP_MISSING, "Username"), "no-user", getComponentInfo())
err := fmt.Errorf(ERRORMSG_PROP_MISSING, "Username")
return SDKErrorf(err, "", "no-user", getComponentInfo())
}

if this.Password == "" {
return SDKErrorf(nil, fmt.Sprintf(ERRORMSG_PROP_MISSING, "Password"), "no-pass", getComponentInfo())
err := fmt.Errorf(ERRORMSG_PROP_MISSING, "Password")
return SDKErrorf(err, "", "no-pass", getComponentInfo())
}

if HasBadFirstOrLastChar(this.Username) {
return SDKErrorf(nil, fmt.Sprintf(ERRORMSG_PROP_INVALID, "Username"), "bad-user", getComponentInfo())
err := fmt.Errorf(ERRORMSG_PROP_INVALID, "Username")
return SDKErrorf(err, "", "bad-user", getComponentInfo())
}

if HasBadFirstOrLastChar(this.Password) {
return SDKErrorf(nil, fmt.Sprintf(ERRORMSG_PROP_INVALID, "Password"), "bad-pass", getComponentInfo())
err := fmt.Errorf(ERRORMSG_PROP_INVALID, "Password")
return SDKErrorf(err, "", "bad-pass", getComponentInfo())
}

return nil
Expand Down
6 changes: 4 additions & 2 deletions core/bearer_token_authenticator.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,8 @@ func NewBearerTokenAuthenticator(bearerToken string) (*BearerTokenAuthenticator,
// newBearerTokenAuthenticator : Constructs a new BearerTokenAuthenticator instance from a map.
func newBearerTokenAuthenticatorFromMap(properties map[string]string) (*BearerTokenAuthenticator, error) {
if properties == nil {
return nil, SDKErrorf(nil, ERRORMSG_PROPS_MAP_NIL, "missing-props", getComponentInfo())
err := fmt.Errorf(ERRORMSG_PROPS_MAP_NIL)
return nil, SDKErrorf(err, "", "missing-props", getComponentInfo())
}

return NewBearerTokenAuthenticator(properties[PROPNAME_BEARER_TOKEN])
Expand All @@ -70,7 +71,8 @@ func (this *BearerTokenAuthenticator) Authenticate(request *http.Request) error
// Ensures the bearer token is not Nil.
func (this BearerTokenAuthenticator) Validate() error {
if this.BearerToken == "" {
return SDKErrorf(nil, fmt.Sprintf(ERRORMSG_PROP_MISSING, "BearerToken"), "no-token", getComponentInfo())
err := fmt.Errorf(ERRORMSG_PROP_MISSING, "BearerToken")
return SDKErrorf(err, "", "no-token", getComponentInfo())
}
return nil
}
4 changes: 3 additions & 1 deletion core/config_utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ package core
import (
"bufio"
"encoding/json"
"fmt"
"os"
"path"
"strings"
Expand Down Expand Up @@ -57,7 +58,8 @@ func GetServiceProperties(serviceName string) (serviceProps map[string]string, e
func getServiceProperties(serviceName string) (serviceProps map[string]string, err error) {

if serviceName == "" {
err = SDKErrorf(nil, "serviceName was not specified", "no-service-name", getComponentInfo())
err = fmt.Errorf("serviceName was not specified")
err = SDKErrorf(err, "", "no-service-name", getComponentInfo())
return
}

Expand Down
18 changes: 10 additions & 8 deletions core/container_authenticator.go
Original file line number Diff line number Diff line change
Expand Up @@ -203,7 +203,8 @@ func (authenticator *ContainerAuthenticator) client() *http.Client {
// configuration properties.
func newContainerAuthenticatorFromMap(properties map[string]string) (authenticator *ContainerAuthenticator, err error) {
if properties == nil {
return nil, SDKErrorf(nil, ERRORMSG_PROPS_MAP_NIL, "missing-props", getComponentInfo())
err = fmt.Errorf(ERRORMSG_PROPS_MAP_NIL)
return nil, SDKErrorf(err, "", "missing-props", getComponentInfo())
}

// Grab the AUTH_DISABLE_SSL string property and convert to a boolean value.
Expand Down Expand Up @@ -283,8 +284,8 @@ func (authenticator *ContainerAuthenticator) Validate() error {

// Check to make sure that one of IAMProfileName or IAMProfileID are specified.
if authenticator.IAMProfileName == "" && authenticator.IAMProfileID == "" {
errMsg := fmt.Sprintf(ERRORMSG_ATLEAST_ONE_PROP_ERROR, "IAMProfileName", "IAMProfileID")
return SDKErrorf(nil, errMsg, "both-props", getComponentInfo())
err := fmt.Errorf(ERRORMSG_ATLEAST_ONE_PROP_ERROR, "IAMProfileName", "IAMProfileID")
return SDKErrorf(err, "", "both-props", getComponentInfo())
}

// Validate ClientId and ClientSecret. They must both be specified togther or neither should be specified.
Expand All @@ -293,13 +294,13 @@ func (authenticator *ContainerAuthenticator) Validate() error {
} else {
// Since it is NOT the case that both properties are empty, make sure BOTH are specified.
if authenticator.ClientID == "" {
errMsg := fmt.Sprintf(ERRORMSG_PROP_MISSING, "ClientID")
return SDKErrorf(nil, errMsg, "missing-id", getComponentInfo())
err := fmt.Errorf(ERRORMSG_PROP_MISSING, "ClientID")
return SDKErrorf(err, "", "missing-id", getComponentInfo())
}

if authenticator.ClientSecret == "" {
errMsg := fmt.Sprintf(ERRORMSG_PROP_MISSING, "ClientSecret")
return SDKErrorf(nil, errMsg, "missing-secret", getComponentInfo())
err := fmt.Errorf(ERRORMSG_PROP_MISSING, "ClientSecret")
return SDKErrorf(err, "", "missing-secret", getComponentInfo())
}
}

Expand Down Expand Up @@ -328,7 +329,8 @@ func (authenticator *ContainerAuthenticator) GetToken() (string, error) {

// return an error if the access token is not valid or was not fetched
if authenticator.getTokenData() == nil || authenticator.getTokenData().AccessToken == "" {
return "", SDKErrorf(nil, "Error while trying to get access token", "no-token", getComponentInfo())
err := fmt.Errorf("Error while trying to get access token")
return "", SDKErrorf(err, "", "no-token", getComponentInfo())
}

return authenticator.getTokenData().AccessToken, nil
Expand Down
18 changes: 10 additions & 8 deletions core/cp4d_authenticator.go
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,8 @@ func newAuthenticator(url string, username string, password string, apikey strin
// newCloudPakForDataAuthenticatorFromMap : Constructs a new CloudPakForDataAuthenticator instance from a map.
func newCloudPakForDataAuthenticatorFromMap(properties map[string]string) (*CloudPakForDataAuthenticator, error) {
if properties == nil {
return nil, SDKErrorf(nil, ERRORMSG_PROPS_MAP_NIL, "missing-props", getComponentInfo())
err := fmt.Errorf(ERRORMSG_PROPS_MAP_NIL)
return nil, SDKErrorf(err, "", "missing-props", getComponentInfo())
}

disableSSL, err := strconv.ParseBool(properties[PROPNAME_AUTH_DISABLE_SSL])
Expand All @@ -142,20 +143,20 @@ func (*CloudPakForDataAuthenticator) AuthenticationType() string {
func (authenticator *CloudPakForDataAuthenticator) Validate() error {

if authenticator.Username == "" {
errMsg := fmt.Sprintf(ERRORMSG_PROP_MISSING, "Username")
return SDKErrorf(nil, errMsg, "no-user", getComponentInfo())
err := fmt.Errorf(ERRORMSG_PROP_MISSING, "Username")
return SDKErrorf(err, "", "no-user", getComponentInfo())
}

// The user should specify exactly one of APIKey or Password.
if (authenticator.APIKey == "" && authenticator.Password == "") ||
(authenticator.APIKey != "" && authenticator.Password != "") {
errMsg := fmt.Sprintf(ERRORMSG_EXCLUSIVE_PROPS_ERROR, "APIKey", "Password")
return SDKErrorf(nil, errMsg, "exc-props", getComponentInfo())
err := fmt.Errorf(ERRORMSG_EXCLUSIVE_PROPS_ERROR, "APIKey", "Password")
return SDKErrorf(err, "", "exc-props", getComponentInfo())
}

if authenticator.URL == "" {
errMsg := fmt.Sprintf(ERRORMSG_PROP_MISSING, "URL")
return SDKErrorf(nil, errMsg, "no-url", getComponentInfo())
err := fmt.Errorf(ERRORMSG_PROP_MISSING, "URL")
return SDKErrorf(err, "", "no-url", getComponentInfo())
}

return nil
Expand Down Expand Up @@ -231,7 +232,8 @@ func (authenticator *CloudPakForDataAuthenticator) GetToken() (string, error) {

// return an error if the access token is not valid or was not fetched
if authenticator.getTokenData() == nil || authenticator.getTokenData().AccessToken == "" {
return "", SDKErrorf(nil, "Error while trying to get access token", "no-token", getComponentInfo())
err := fmt.Errorf("Error while trying to get access token")
return "", SDKErrorf(err, "", "no-token", getComponentInfo())
}

return authenticator.getTokenData().AccessToken, nil
Expand Down
29 changes: 16 additions & 13 deletions core/iam_authenticator.go
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,8 @@ func NewIamAuthenticator(apiKey string, url string, clientId string, clientSecre
// newIamAuthenticatorFromMap constructs a new IamAuthenticator instance from a map.
func newIamAuthenticatorFromMap(properties map[string]string) (authenticator *IamAuthenticator, err error) {
if properties == nil {
return nil, SDKErrorf(nil, ERRORMSG_PROPS_MAP_NIL, "missing-props", getComponentInfo())
err := fmt.Errorf(ERRORMSG_PROPS_MAP_NIL)
return nil, SDKErrorf(err, "", "missing-props", getComponentInfo())
}

disableSSL, err := strconv.ParseBool(properties[PROPNAME_AUTH_DISABLE_SSL])
Expand Down Expand Up @@ -315,13 +316,13 @@ func (authenticator *IamAuthenticator) Validate() error {
// normal use.
//
if authenticator.ApiKey == "" && authenticator.RefreshToken == "" {
errMsg := fmt.Sprintf(ERRORMSG_EXCLUSIVE_PROPS_ERROR, "ApiKey", "RefreshToken")
return SDKErrorf(nil, errMsg, "exc-props", getComponentInfo())
err := fmt.Errorf(ERRORMSG_EXCLUSIVE_PROPS_ERROR, "ApiKey", "RefreshToken")
return SDKErrorf(err, "", "exc-props", getComponentInfo())
}

if authenticator.ApiKey != "" && HasBadFirstOrLastChar(authenticator.ApiKey) {
errMsg := fmt.Sprintf(ERRORMSG_PROP_INVALID, "ApiKey")
return SDKErrorf(nil, errMsg, "bad-prop", getComponentInfo())
err := fmt.Errorf(ERRORMSG_PROP_INVALID, "ApiKey")
return SDKErrorf(err, "", "bad-prop", getComponentInfo())
}

// Validate ClientId and ClientSecret.
Expand All @@ -331,13 +332,13 @@ func (authenticator *IamAuthenticator) Validate() error {
} else {
// Since it is NOT the case that both properties are empty, make sure BOTH are specified.
if authenticator.ClientId == "" {
errMsg := fmt.Sprintf(ERRORMSG_PROP_MISSING, "ClientId")
return SDKErrorf(nil, errMsg, "missing-id", getComponentInfo())
err := fmt.Errorf(ERRORMSG_PROP_MISSING, "ClientId")
return SDKErrorf(err, "", "missing-id", getComponentInfo())
}

if authenticator.ClientSecret == "" {
errMsg := fmt.Sprintf(ERRORMSG_PROP_MISSING, "ClientSecret")
return SDKErrorf(nil, errMsg, "missing-secret", getComponentInfo())
err := fmt.Errorf(ERRORMSG_PROP_MISSING, "ClientSecret")
return SDKErrorf(err, "", "missing-secret", getComponentInfo())
}
}

Expand All @@ -362,7 +363,8 @@ func (authenticator *IamAuthenticator) GetToken() (string, error) {

// return an error if the access token is not valid or was not fetched
if authenticator.getTokenData() == nil || authenticator.getTokenData().AccessToken == "" {
return "", SDKErrorf(nil, "Error while trying to get access token", "no-token", getComponentInfo())
err := fmt.Errorf("Error while trying to get access token")
return "", SDKErrorf(err, "", "no-token", getComponentInfo())
}

return authenticator.getTokenData().AccessToken, nil
Expand Down Expand Up @@ -423,8 +425,8 @@ func (authenticator *IamAuthenticator) RequestToken() (*IamTokenServerResponse,
builder.AddFormData("refresh_token", "", "", authenticator.RefreshToken)
} else {
// We shouldn't ever get here due to prior validations, but just in case, let's log an error.
errMsg := fmt.Sprintf(ERRORMSG_EXCLUSIVE_PROPS_ERROR, "ApiKey", "RefreshToken")
return nil, SDKErrorf(nil, errMsg, "iam-exc-props", getComponentInfo())
err := fmt.Errorf(ERRORMSG_EXCLUSIVE_PROPS_ERROR, "ApiKey", "RefreshToken")
return nil, SDKErrorf(err, "", "iam-exc-props", getComponentInfo())
}

// Add any optional parameters to the request.
Expand Down Expand Up @@ -529,7 +531,8 @@ type iamTokenData struct {
func newIamTokenData(tokenResponse *IamTokenServerResponse) (*iamTokenData, error) {

if tokenResponse == nil {
return nil, SDKErrorf(nil, "Error while trying to parse access token!", "token-parse", getComponentInfo())
err := fmt.Errorf("Error while trying to parse access token!")
return nil, SDKErrorf(err, "", "token-parse", getComponentInfo())
}
// Compute the adjusted refresh time (expiration time - 20% of timeToLive)
timeToLive := tokenResponse.ExpiresIn
Expand Down
3 changes: 2 additions & 1 deletion core/jwt_utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,8 @@ func parseJWT(tokenString string) (claims *coreJWTClaims, err error) {
// A JWT consists of three .-separated segments
segments := strings.Split(tokenString, ".")
if len(segments) != 3 {
err = SDKErrorf(nil, "token contains an invalid number of segments", "need-3-segs", getComponentInfo())
err = fmt.Errorf("token contains an invalid number of segments")
err = SDKErrorf(err, "", "need-3-segs", getComponentInfo())
return
}

Expand Down
17 changes: 10 additions & 7 deletions core/mcsp_authenticator.go
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,8 @@ func (authenticator *MCSPAuthenticator) client() *http.Client {
// newMCSPAuthenticatorFromMap constructs a new MCSPAuthenticator instance from a map.
func newMCSPAuthenticatorFromMap(properties map[string]string) (authenticator *MCSPAuthenticator, err error) {
if properties == nil {
return nil, SDKErrorf(nil, ERRORMSG_PROPS_MAP_NIL, "missing-props", getComponentInfo())
err = fmt.Errorf(ERRORMSG_PROPS_MAP_NIL)
return nil, SDKErrorf(err, "", "missing-props", getComponentInfo())
}

disableSSL, err := strconv.ParseBool(properties[PROPNAME_AUTH_DISABLE_SSL])
Expand Down Expand Up @@ -197,13 +198,13 @@ func (authenticator *MCSPAuthenticator) setTokenData(tokenData *mcspTokenData) {
func (authenticator *MCSPAuthenticator) Validate() error {

if authenticator.ApiKey == "" {
errMsg := fmt.Sprintf(ERRORMSG_PROP_MISSING, "ApiKey")
return SDKErrorf(nil, errMsg, "missing-api-key", getComponentInfo())
err := fmt.Errorf(ERRORMSG_PROP_MISSING, "ApiKey")
return SDKErrorf(err, "", "missing-api-key", getComponentInfo())
}

if authenticator.URL == "" {
errMsg := fmt.Sprintf(ERRORMSG_PROP_MISSING, "URL")
return SDKErrorf(nil, errMsg, "missing-url", getComponentInfo())
err := fmt.Errorf(ERRORMSG_PROP_MISSING, "URL")
return SDKErrorf(err, "", "missing-url", getComponentInfo())
}

return nil
Expand All @@ -227,7 +228,8 @@ func (authenticator *MCSPAuthenticator) GetToken() (string, error) {

// return an error if the access token is not valid or was not fetched
if authenticator.getTokenData() == nil || authenticator.getTokenData().AccessToken == "" {
return "", SDKErrorf(nil, "Error while trying to get access token", "no-token", getComponentInfo())
err := fmt.Errorf("Error while trying to get access token")
return "", SDKErrorf(err, "", "no-token", getComponentInfo())
}

return authenticator.getTokenData().AccessToken, nil
Expand Down Expand Up @@ -368,7 +370,8 @@ type mcspTokenData struct {
// MCSPTokenServerResponse instance.
func newMCSPTokenData(tokenResponse *MCSPTokenServerResponse) (*mcspTokenData, error) {
if tokenResponse == nil || tokenResponse.Token == "" {
return nil, SDKErrorf(nil, "Error while trying to parse access token!", "token-parse", getComponentInfo())
err := fmt.Errorf("Error while trying to parse access token!")
return nil, SDKErrorf(err, "", "token-parse", getComponentInfo())
}

// Need to crack open the access token (a JWT) to get the expiration and issued-at times
Expand Down
16 changes: 9 additions & 7 deletions core/request_builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ func (requestBuilder *RequestBuilder) WithContext(ctx context.Context) *RequestB
// invalid URL string (e.g. ":<badscheme>").
func (requestBuilder *RequestBuilder) ConstructHTTPURL(serviceURL string, pathSegments []string, pathParameters []string) (*RequestBuilder, error) {
if serviceURL == "" {
return requestBuilder, SDKErrorf(nil, ERRORMSG_SERVICE_URL_MISSING, "no-url", getComponentInfo())
return requestBuilder, SDKErrorf(fmt.Errorf(ERRORMSG_SERVICE_URL_MISSING), "", "no-url", getComponentInfo())
}
var URL *url.URL

Expand Down Expand Up @@ -143,7 +143,8 @@ func (requestBuilder *RequestBuilder) ConstructHTTPURL(serviceURL string, pathSe
// The resulting request URL: "https://myservice.cloud.ibm.com/resource/res-123-456-789-abc/type/type-1"
func (requestBuilder *RequestBuilder) ResolveRequestURL(serviceURL string, path string, pathParams map[string]string) (*RequestBuilder, error) {
if serviceURL == "" {
return requestBuilder, fmt.Errorf(ERRORMSG_SERVICE_URL_MISSING)
err := fmt.Errorf(ERRORMSG_SERVICE_URL_MISSING)
return requestBuilder, SDKErrorf(err, "", "service-url-missing", getComponentInfo())
}

urlString := serviceURL
Expand All @@ -156,8 +157,8 @@ func (requestBuilder *RequestBuilder) ResolveRequestURL(serviceURL string, path
if len(pathParams) > 0 {
for k, v := range pathParams {
if v == "" {
errMsg := fmt.Sprintf(ERRORMSG_PATH_PARAM_EMPTY, k)
return requestBuilder, SDKErrorf(nil, errMsg, "empty-path-param", getComponentInfo())
err := fmt.Errorf(ERRORMSG_PATH_PARAM_EMPTY, k)
return requestBuilder, SDKErrorf(err, "", "empty-path-param", getComponentInfo())
}
encodedValue := url.PathEscape(v)
ref := fmt.Sprintf("{%s}", k)
Expand Down Expand Up @@ -506,12 +507,13 @@ func (requestBuilder *RequestBuilder) SetBodyContent(contentType string, jsonCon
err = RepurposeSDKProblem(err, "set-body-readerptr-error")
} else {
builder = requestBuilder
errMsg := fmt.Sprintf("Invalid type for non-JSON body content: %s", reflect.TypeOf(nonJSONContent).String())
err = SDKErrorf(nil, errMsg, "bad-nonjson-body-content", getComponentInfo())
err = fmt.Errorf("Invalid type for non-JSON body content: %s", reflect.TypeOf(nonJSONContent).String())
err = SDKErrorf(err, "", "bad-nonjson-body-content", getComponentInfo())
}
} else {
builder = requestBuilder
err = SDKErrorf(nil, "No body content provided", "no-body-content", getComponentInfo())
err = fmt.Errorf("No body content provided")
err = SDKErrorf(err, "", "no-body-content", getComponentInfo())
}

return
Expand Down

0 comments on commit 005fdb8

Please sign in to comment.