MCPcopy
hub / github.com/openfaas/faas / MakeForwardingProxyHandler

Function MakeForwardingProxyHandler

gateway/handlers/forwarding_proxy.go:27–63  ·  view source on GitHub ↗

MakeForwardingProxyHandler create a handler which forwards HTTP requests

(proxy *types.HTTPClientReverseProxy,
	notifiers []HTTPNotifier,
	baseURLResolver middleware.BaseURLResolver,
	urlPathTransformer middleware.URLPathTransformer,
	serviceAuthInjector middleware.AuthInjector)

Source from the content-addressed store, hash-verified

25
26// MakeForwardingProxyHandler create a handler which forwards HTTP requests
27func MakeForwardingProxyHandler(proxy *types.HTTPClientReverseProxy,
28 notifiers []HTTPNotifier,
29 baseURLResolver middleware.BaseURLResolver,
30 urlPathTransformer middleware.URLPathTransformer,
31 serviceAuthInjector middleware.AuthInjector) http.HandlerFunc {
32
33 writeRequestURI := false
34 if _, exists := os.LookupEnv("write_request_uri"); exists {
35 writeRequestURI = exists
36 }
37
38 reverseProxy := makeRewriteProxy(baseURLResolver, urlPathTransformer)
39
40 return func(w http.ResponseWriter, r *http.Request) {
41
42 baseURL := baseURLResolver.Resolve(r)
43 originalURL := r.URL.String()
44 requestURL := urlPathTransformer.Transform(r)
45
46 for _, notifier := range notifiers {
47 notifier.Notify(r.Method, requestURL, originalURL, http.StatusProcessing, "started", time.Second*0)
48 }
49
50 start := time.Now()
51
52 statusCode, err := forwardRequest(w, r, proxy.Client, baseURL, requestURL, proxy.Timeout, writeRequestURI, serviceAuthInjector, reverseProxy)
53 if err != nil {
54 log.Printf("error with upstream request to: %s, %s\n", requestURL, err.Error())
55 }
56
57 seconds := time.Since(start)
58
59 for _, notifier := range notifiers {
60 notifier.Notify(r.Method, requestURL, originalURL, statusCode, "completed", seconds)
61 }
62 }
63}
64
65func buildUpstreamRequest(r *http.Request, baseURL string, requestURL string) *http.Request {
66 url := baseURL + requestURL

Callers 1

mainFunction · 0.92

Calls 5

makeRewriteProxyFunction · 0.85
forwardRequestFunction · 0.85
ResolveMethod · 0.65
TransformMethod · 0.65
NotifyMethod · 0.65

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…