oauth2-proxy/oauth2-proxy

View on GitHub
pkg/upstream/static.go

Summary

Maintainability
A
0 mins
Test Coverage
A
90%
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
}