@@ -11,6 +11,7 @@ import (
11
11
"net/http"
12
12
"net/http/httputil"
13
13
"net/textproto"
14
+ "regexp"
14
15
"strings"
15
16
"time"
16
17
@@ -62,31 +63,35 @@ func NewKubeFilter(opts options.ListenerOpts, srv options.ServerOptions, rbRefle
62
63
reverseProxy .Transport = reverseProxyTransport
63
64
64
65
return & kubeFilter {
65
- reader : clientOverride ,
66
- writer : client ,
67
- managerReader : client ,
68
- allowedPaths : sets .New ("/api" , "/apis" , "/version" ),
69
- authTypes : opts .AuthTypes (),
70
- ignoredUserGroups : sets .New (opts .IgnoredGroupNames ()... ),
71
- reverseProxy : reverseProxy ,
72
- bearerToken : opts .BearerToken (),
73
- usernameClaimField : opts .PreferredUsernameClaim (),
74
- serverOptions : srv ,
75
- log : ctrl .Log .WithName ("proxy" ),
76
- roleBindingsReflector : rbReflector ,
66
+ reader : clientOverride ,
67
+ writer : client ,
68
+ managerReader : client ,
69
+ allowedPaths : sets .New ("/api" , "/apis" , "/version" ),
70
+ authTypes : opts .AuthTypes (),
71
+ ignoredUserGroups : sets .New (opts .IgnoredGroupNames ()... ),
72
+ ignoredImpersonationGroups : opts .IgnoredImpersonationsGroups (),
73
+ impersonationGroupsRegexp : opts .ImpersonationGroupsRegexp (),
74
+ reverseProxy : reverseProxy ,
75
+ bearerToken : opts .BearerToken (),
76
+ usernameClaimField : opts .PreferredUsernameClaim (),
77
+ serverOptions : srv ,
78
+ log : ctrl .Log .WithName ("proxy" ),
79
+ roleBindingsReflector : rbReflector ,
77
80
}, nil
78
81
}
79
82
80
83
type kubeFilter struct {
81
- allowedPaths sets.Set [string ]
82
- authTypes []req.AuthType
83
- ignoredUserGroups sets.Set [string ]
84
- reverseProxy * httputil.ReverseProxy
85
- bearerToken string
86
- usernameClaimField string
87
- serverOptions options.ServerOptions
88
- log logr.Logger
89
- roleBindingsReflector * controllers.RoleBindingReflector
84
+ allowedPaths sets.Set [string ]
85
+ authTypes []req.AuthType
86
+ ignoredUserGroups sets.Set [string ]
87
+ ignoredImpersonationGroups []string
88
+ impersonationGroupsRegexp * regexp.Regexp
89
+ reverseProxy * httputil.ReverseProxy
90
+ bearerToken string
91
+ usernameClaimField string
92
+ serverOptions options.ServerOptions
93
+ log logr.Logger
94
+ roleBindingsReflector * controllers.RoleBindingReflector
90
95
91
96
managerReader , reader client.Reader
92
97
writer client.Writer
@@ -172,7 +177,7 @@ func (n *kubeFilter) handleRequest(request *http.Request, selector labels.Select
172
177
}
173
178
174
179
func (n * kubeFilter ) impersonateHandler (writer http.ResponseWriter , request * http.Request ) {
175
- hr := req .NewHTTP (request , n .authTypes , n .usernameClaimField , n .writer )
180
+ hr := req .NewHTTP (request , n .authTypes , n .usernameClaimField , n .writer , n . ignoredImpersonationGroups , n . impersonationGroupsRegexp )
176
181
177
182
username , groups , err := hr .GetUserAndGroups ()
178
183
if err != nil {
@@ -243,7 +248,7 @@ func (n *kubeFilter) registerModules(ctx context.Context, root *mux.Router) {
243
248
middleware .CheckUserInCapsuleGroupMiddleware (n .writer , n .log , n .usernameClaimField , n .authTypes , n .impersonateHandler ),
244
249
)
245
250
sr .HandleFunc ("" , func (writer http.ResponseWriter , request * http.Request ) {
246
- proxyRequest := req .NewHTTP (request , n .authTypes , n .usernameClaimField , n .writer )
251
+ proxyRequest := req .NewHTTP (request , n .authTypes , n .usernameClaimField , n .writer , nil , nil )
247
252
username , groups , err := proxyRequest .GetUserAndGroups ()
248
253
if err != nil {
249
254
server .HandleError (writer , err , "cannot retrieve user and group from the request" )
0 commit comments