mirror of
https://github.com/oauth2-proxy/oauth2-proxy.git
synced 2024-11-24 08:52:25 +02:00
602dac7852
* Use a specialized ResponseWriter in middleware * Track User & Upstream in RequestScope * Wrap responses in our custom ResponseWriter * Add tests for logging middleware * Inject upstream metadata into request scope * Use custom ResponseWriter only in logging middleware * Assume RequestScope is never nil
49 lines
1.3 KiB
Go
49 lines
1.3 KiB
Go
package upstream
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
|
|
"github.com/oauth2-proxy/oauth2-proxy/v7/pkg/apis/middleware"
|
|
"github.com/oauth2-proxy/oauth2-proxy/v7/pkg/logger"
|
|
)
|
|
|
|
const defaultStaticResponseCode = 200
|
|
|
|
// newStaticResponseHandler creates a new staticResponseHandler that serves a
|
|
// a static response code.
|
|
func newStaticResponseHandler(upstream string, code *int) http.Handler {
|
|
return &staticResponseHandler{
|
|
code: derefStaticCode(code),
|
|
upstream: upstream,
|
|
}
|
|
}
|
|
|
|
// staticResponseHandler responds with a static response with the given response code.
|
|
type staticResponseHandler struct {
|
|
code int
|
|
upstream string
|
|
}
|
|
|
|
// ServeHTTP serves a static response.
|
|
func (s *staticResponseHandler) ServeHTTP(rw http.ResponseWriter, req *http.Request) {
|
|
scope := middleware.GetRequestScope(req)
|
|
// If scope is nil, this will panic.
|
|
// A scope should always be injected before this handler is called.
|
|
scope.Upstream = s.upstream
|
|
|
|
rw.WriteHeader(s.code)
|
|
_, err := fmt.Fprintf(rw, "Authenticated")
|
|
if err != nil {
|
|
logger.Errorf("Error writing static response: %v", err)
|
|
}
|
|
}
|
|
|
|
// derefStaticCode returns the derefenced value, or the default if the value is nil
|
|
func derefStaticCode(code *int) int {
|
|
if code != nil {
|
|
return *code
|
|
}
|
|
return defaultStaticResponseCode
|
|
}
|