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:
parent
224a8453e3
commit
90c5b3c1c5
|
@ -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))
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
```release-note:bug
|
||||||
|
core (enterprise): namespace header included in responses, Go client uses it when displaying error messages
|
||||||
|
```
|
|
@ -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()
|
||||||
|
|
Loading…
Reference in New Issue