VAULT-1303 when a request to vault fails, show namespace if set (#12196)

* VAULT-1303 when a request to vault fails, show namespace if set

* Adding changelog

* Fix Changelog file name

* Set namespace in ResponseWriter headers if it is set

* Using consts.NamespaceHeaderName instead of the literal string
This commit is contained in:
hghaf099 2021-07-30 12:32:05 -04:00 committed by GitHub
parent 224a8453e3
commit 90c5b3c1c5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 25 additions and 3 deletions

View File

@ -7,6 +7,7 @@ import (
"io/ioutil" "io/ioutil"
"net/http" "net/http"
"github.com/hashicorp/vault/sdk/helper/consts"
"github.com/hashicorp/vault/sdk/helper/jsonutil" "github.com/hashicorp/vault/sdk/helper/jsonutil"
) )
@ -41,12 +42,14 @@ func (r *Response) Error() error {
r.Body.Close() r.Body.Close()
r.Body = ioutil.NopCloser(bodyBuf) r.Body = ioutil.NopCloser(bodyBuf)
ns := r.Header.Get(consts.NamespaceHeaderName)
// Build up the error object // Build up the error object
respErr := &ResponseError{ respErr := &ResponseError{
HTTPMethod: r.Request.Method, HTTPMethod: r.Request.Method,
URL: r.Request.URL.String(), URL: r.Request.URL.String(),
StatusCode: r.StatusCode, StatusCode: r.StatusCode,
NamespacePath: ns,
} }
// Decode the error response if we can. Note that we wrap the bodyBuf // Decode the error response if we can. Note that we wrap the bodyBuf
@ -92,6 +95,10 @@ type ResponseError struct {
// Errors are the underlying errors returned by Vault. // Errors are the underlying errors returned by Vault.
Errors []string Errors []string
// Namespace path to be reported to the client if it is set to anything other
// than root
NamespacePath string
} }
// Error returns a human-readable error string for the response error. // Error returns a human-readable error string for the response error.
@ -101,9 +108,15 @@ func (r *ResponseError) Error() string {
errString = "Raw Message" errString = "Raw Message"
} }
var ns string
if r.NamespacePath != "" && r.NamespacePath != "root/" {
ns = "Namespace: " + r.NamespacePath + "\n"
}
var errBody bytes.Buffer var errBody bytes.Buffer
errBody.WriteString(fmt.Sprintf( errBody.WriteString(fmt.Sprintf(
"Error making API request.\n\n"+ "Error making API request.\n\n"+
ns+
"URL: %s %s\n"+ "URL: %s %s\n"+
"Code: %d. %s:\n\n", "Code: %d. %s:\n\n",
r.HTTPMethod, r.URL, r.StatusCode, errString)) r.HTTPMethod, r.URL, r.StatusCode, errString))

3
changelog/12196.txt Normal file
View File

@ -0,0 +1,3 @@
```release-note:bug
core (enterprise): namespace header included in responses, Go client uses it when displaying error messages
```

View File

@ -350,6 +350,12 @@ func wrapGenericHandler(core *vault.Core, h http.Handler, props *vault.HandlerPr
return return
} }
// Setting the namespace in the header to be included in the error message
ns := r.Header.Get(consts.NamespaceHeaderName)
if ns != "" {
w.Header().Set(consts.NamespaceHeaderName, ns)
}
h.ServeHTTP(w, r) h.ServeHTTP(w, r)
cancelFunc() cancelFunc()