40 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			40 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Go
		
	
	
	
| package middleware
 | |
| 
 | |
| import (
 | |
| 	"context"
 | |
| 	"net/http"
 | |
| 
 | |
| 	"github.com/justinas/alice"
 | |
| 	middlewareapi "github.com/oauth2-proxy/oauth2-proxy/pkg/apis/middleware"
 | |
| )
 | |
| 
 | |
| type scopeKey string
 | |
| 
 | |
| // requestScopeKey uses a typed string to reduce likelihood of clasing
 | |
| // with other context keys
 | |
| const requestScopeKey scopeKey = "request-scope"
 | |
| 
 | |
| func NewScope() alice.Constructor {
 | |
| 	return addScope
 | |
| }
 | |
| 
 | |
| // addScope injects a new request scope into the request context.
 | |
| func addScope(next http.Handler) http.Handler {
 | |
| 	return http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) {
 | |
| 		scope := &middlewareapi.RequestScope{}
 | |
| 		contextWithScope := context.WithValue(req.Context(), requestScopeKey, scope)
 | |
| 		requestWithScope := req.WithContext(contextWithScope)
 | |
| 		next.ServeHTTP(rw, requestWithScope)
 | |
| 	})
 | |
| }
 | |
| 
 | |
| // GetRequestScope returns the current request scope from the given request
 | |
| func GetRequestScope(req *http.Request) *middlewareapi.RequestScope {
 | |
| 	scope := req.Context().Value(requestScopeKey)
 | |
| 	if scope == nil {
 | |
| 		return nil
 | |
| 	}
 | |
| 
 | |
| 	return scope.(*middlewareapi.RequestScope)
 | |
| }
 |