diff --git a/common/middleware/errorhandler.go b/common/middleware/errorhandler.go index fdb539d37..9608c3750 100644 --- a/common/middleware/errorhandler.go +++ b/common/middleware/errorhandler.go @@ -1,6 +1,9 @@ package middleware import ( + "bufio" + "fmt" + "net" "net/http" ) @@ -78,3 +81,14 @@ func (i *errorInterceptor) Write(data []byte) (int, error) { } return len(data), nil } + +// errorInterceptor also implements net.Hijacker, to let the downstream Handler +// hijack the connection. This is needed by the app-mapper's proxy. +func (i *errorInterceptor) Hijack() (net.Conn, *bufio.ReadWriter, error) { + hj, ok := i.originalWriter.(http.Hijacker) + if !ok { + return nil, nil, fmt.Errorf("error interceptor: can't cast original ResponseWriter to Hijacker") + } + i.gotCode = true + return hj.Hijack() +}