Bound provider error response body reads
This commit is contained in:
@@ -81,6 +81,22 @@ func newProviderHTTPError(statusCode int, details providerErrorDetails) *Provide
|
||||
}
|
||||
}
|
||||
|
||||
func providerHTTPErrorFromBody(statusCode int, contentLength int64, body io.Reader) *ProviderHTTPError {
|
||||
if contentLength > maxProviderErrorResponseBytes {
|
||||
return newProviderHTTPError(statusCode, providerErrorDetails{})
|
||||
}
|
||||
|
||||
limited := &io.LimitedReader{
|
||||
R: body,
|
||||
N: maxProviderErrorResponseBytes + 1,
|
||||
}
|
||||
contents, err := io.ReadAll(limited)
|
||||
if err != nil || limited.N == 0 {
|
||||
return newProviderHTTPError(statusCode, providerErrorDetails{})
|
||||
}
|
||||
return newProviderHTTPError(statusCode, parseProviderErrorEnvelope(contents))
|
||||
}
|
||||
|
||||
func parseProviderErrorEnvelope(body []byte) providerErrorDetails {
|
||||
decoder := json.NewDecoder(strings.NewReader(string(body)))
|
||||
decoder.UseNumber()
|
||||
|
||||
Reference in New Issue
Block a user