in azkustodata/conn.go [153:207]
func (c *Conn) doRequestImpl(
ctx context.Context,
op errors.Op,
endpoint *url.URL,
buff io.ReadCloser,
headers http.Header,
errorContext string) (http.Header, io.ReadCloser, error) {
// Replace non-ascii chars in headers with '?'
for _, values := range headers {
var builder strings.Builder
for i := range values {
for _, char := range values[i] {
if char > unicode.MaxASCII {
builder.WriteRune('?')
} else {
builder.WriteRune(char)
}
}
values[i] = builder.String()
}
}
if c.auth.TokenProvider != nil && c.auth.TokenProvider.AuthorizationRequired() {
c.auth.TokenProvider.SetHttp(c.client)
token, tokenType, tkerr := c.auth.TokenProvider.AcquireToken(ctx)
if tkerr != nil {
return nil, nil, errors.ES(op, errors.KInternal, "Error while getting token : %s", tkerr)
}
headers.Add("Authorization", fmt.Sprintf("%s %s", tokenType, token))
}
req := &http.Request{
Method: http.MethodPost,
URL: endpoint,
Header: headers,
Body: buff,
}
resp, err := c.client.Do(req.WithContext(ctx))
if err != nil {
// TODO(jdoak): We need a http error unwrap function that pulls out an *errors.Error.
return nil, nil, errors.E(op, errors.KHTTPError, fmt.Errorf("%v, %w", errorContext, err))
}
body, err := response.TranslateBody(resp, op)
if err != nil {
return nil, nil, err
}
if resp.StatusCode != http.StatusOK {
return nil, nil, errors.HTTP(op, resp.Status, resp.StatusCode, body, fmt.Sprintf("error from Kusto endpoint, %v", errorContext))
}
return resp.Header, body, nil
}