func()

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)
	}
}