in proxy.go [57:109]
func (s *ProxyServer) handleAzureRequests(w http.ResponseWriter, req *http.Request) {
logger := s.logger
logger.Infof("Proxy %s %s", req.Method, req.RequestURI)
defer req.Body.Close()
buf, err := ioutil.ReadAll(req.Body)
if err != nil {
logger.Errorf("Failed to read request: %v", err.Error())
s.handleProxyFailure(w)
return
}
apiVersion := req.URL.Query()["api-version"]
buf, err = enableTCPReset(req.Method, req.RequestURI, apiVersion[0], buf)
if err != nil {
logger.Errorf("Failed to enable TCP Reset: %v", err.Error())
s.handleProxyFailure(w)
return
}
env, err := azure.EnvironmentFromName(s.cloud)
if err != nil {
logger.Errorf("error in getting %s environment: %v", s.cloud, err)
return
}
reqURI := fmt.Sprintf("%s%s", env.ResourceManagerEndpoint, req.RequestURI)
proxyReq, err := http.NewRequest(req.Method, reqURI, bytes.NewReader(buf))
if err != nil {
logger.Errorf("Unable to construct request: %s", err.Error())
s.handleProxyFailure(w)
return
}
copyHeader(proxyReq.Header, req.Header)
resp, err := s.client.Do(proxyReq)
if err != nil {
logger.Errorf("Failed to proxy request: %v", err.Error())
s.handleProxyFailure(w)
return
}
copyHeader(w.Header(), resp.Header)
w.WriteHeader(resp.StatusCode)
defer resp.Body.Close()
if _, err := io.Copy(w, resp.Body); err != nil {
logger.Errorf("Failed to copy response body: %v", err.Error())
s.handleProxyFailure(w)
}
}