mirror of
https://github.com/oauth2-proxy/oauth2-proxy.git
synced 2025-01-28 05:36:20 +02:00
c1267bb92d
* Add RequestID to the RequestScope * Expose RequestID to auth & request loggers * Use the RequestID in templated HTML pages * Allow customizing the RequestID header * Document new Request ID support * Add more cases to scope/requestID tests * Split Get vs Generate RequestID funtionality * Add {{.RequestID}} to the request logger tests * Move RequestID management to RequestScope * Use HTML escape instead of sanitization for Request ID rendering
61 lines
1.7 KiB
Go
61 lines
1.7 KiB
Go
package middleware
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
|
|
"github.com/oauth2-proxy/oauth2-proxy/v7/pkg/apis/sessions"
|
|
)
|
|
|
|
type scopeKey string
|
|
|
|
// RequestScopeKey uses a typed string to reduce likelihood of clashing
|
|
// with other context keys
|
|
const RequestScopeKey scopeKey = "request-scope"
|
|
|
|
// RequestScope contains information regarding the request that is being made.
|
|
// The RequestScope is used to pass information between different middlewares
|
|
// within the chain.
|
|
type RequestScope struct {
|
|
// ReverseProxy tracks whether OAuth2-Proxy is operating in reverse proxy
|
|
// mode and if request `X-Forwarded-*` headers should be trusted
|
|
ReverseProxy bool
|
|
|
|
// RequestID is set to the request's `X-Request-Id` header if set.
|
|
// Otherwise a random UUID is set.
|
|
RequestID string
|
|
|
|
// Session details the authenticated users information (if it exists).
|
|
Session *sessions.SessionState
|
|
|
|
// SaveSession indicates whether the session storage should attempt to save
|
|
// the session or not.
|
|
SaveSession bool
|
|
|
|
// ClearSession indicates whether the user should be logged out or not.
|
|
ClearSession bool
|
|
|
|
// SessionRevalidated indicates whether the session has been revalidated since
|
|
// it was loaded or not.
|
|
SessionRevalidated bool
|
|
|
|
// Upstream tracks which upstream was used for this request
|
|
Upstream string
|
|
}
|
|
|
|
// GetRequestScope returns the current request scope from the given request
|
|
func GetRequestScope(req *http.Request) *RequestScope {
|
|
scope := req.Context().Value(RequestScopeKey)
|
|
if scope == nil {
|
|
return nil
|
|
}
|
|
|
|
return scope.(*RequestScope)
|
|
}
|
|
|
|
// AddRequestScope adds a RequestScope to a request
|
|
func AddRequestScope(req *http.Request, scope *RequestScope) *http.Request {
|
|
ctx := context.WithValue(req.Context(), RequestScopeKey, scope)
|
|
return req.WithContext(ctx)
|
|
}
|