do not try to add the selected policy to the context

Signed-off-by: Jörn Friedrich Dreyer <jfd@butonic.de>
This commit is contained in:
Jörn Friedrich Dreyer
2021-07-14 20:45:38 +00:00
parent 85693de589
commit 8c7f1f01ff
6 changed files with 9 additions and 19 deletions
+4 -1
View File
@@ -2,4 +2,7 @@ module _ // Auto generated by https://github.com/bwplotka/bingo. DO NOT EDIT
go 1.16 go 1.16
require github.com/haya14busa/goverage v0.0.0-20180129164344-eec3514a20b5 require (
github.com/haya14busa/goverage v0.0.0-20180129164344-eec3514a20b5
golang.org/x/tools v0.1.5 // indirect
)
+4 -1
View File
@@ -1,5 +1,8 @@
Bugfix: log all requests in the proxy access log Bugfix: log all requests in the proxy access log
We now use a dedicated middleware to log all requests, regardless of routing selector outcome. The log now includes the remote address and the selected routing policy. We now use a dedicated middleware to log all requests, regardless of routing selector outcome.
While the log now includes the remote address, the selected routing policy is only logged when log level
is set to debug because the request context cannot be changed in the `directorSelectionDirector`, as per
the `ReverseProxy.Director` documentation.
https://github.com/owncloud/ocis/pull/2301 https://github.com/owncloud/ocis/pull/2301
-2
View File
@@ -6,7 +6,6 @@ import (
"github.com/go-chi/chi/middleware" "github.com/go-chi/chi/middleware"
"github.com/owncloud/ocis/ocis-pkg/log" "github.com/owncloud/ocis/ocis-pkg/log"
"github.com/owncloud/ocis/proxy/pkg/proxy/policy"
) )
// AccessLog is a middleware to log http requests at info level logging. // AccessLog is a middleware to log http requests at info level logging.
@@ -22,7 +21,6 @@ func AccessLog(logger log.Logger) func(http.Handler) http.Handler {
Str("request", r.Header.Get("X-Request-ID")). Str("request", r.Header.Get("X-Request-ID")).
Str("remote-addr", r.RemoteAddr). Str("remote-addr", r.RemoteAddr).
Str("method", r.Method). Str("method", r.Method).
Str("routing-policy", policy.ContextGetPolicy(r.Context())).
Int("status", wrap.Status()). Int("status", wrap.Status()).
Str("path", r.URL.Path). Str("path", r.URL.Path).
Dur("duration", time.Since(start)). Dur("duration", time.Since(start)).
+1
View File
@@ -96,6 +96,7 @@ func (m oidcAuth) getClaims(token string, req *http.Request) (claims oidc.Standa
return return
} }
// TODO allow extracting arbitrary claims ... or require idp to send a specific claim
if err := userInfo.Claims(&claims); err != nil { if err := userInfo.Claims(&claims); err != nil {
m.logger.Error().Err(err).Interface("userinfo", userInfo).Msg("failed to unmarshal userinfo claims") m.logger.Error().Err(err).Interface("userinfo", userInfo).Msg("failed to unmarshal userinfo claims")
status = http.StatusInternalServerError status = http.StatusInternalServerError
-14
View File
@@ -20,20 +20,6 @@ var (
ErrUnexpectedConfigError = fmt.Errorf("could not initialize policy-selector for given config") ErrUnexpectedConfigError = fmt.Errorf("could not initialize policy-selector for given config")
) )
// policyKey serves as key for the routing policy in the context
var policyKey struct{}
// ContextGetPolicy returns the policy if set in the given context.
func ContextGetPolicy(ctx context.Context) string {
u, _ := ctx.Value(policyKey).(string)
return u
}
// ContextSetPolicy stores the selected policy in the context.
func ContextSetPolicy(ctx context.Context, p string) context.Context {
return context.WithValue(ctx, policyKey, p)
}
// Selector is a function which selects a proxy-policy based on the request. // Selector is a function which selects a proxy-policy based on the request.
// //
// A policy is a random name which identifies a set of proxy-routes: // A policy is a random name which identifies a set of proxy-routes:
-1
View File
@@ -146,7 +146,6 @@ func (p *MultiHostReverseProxy) directorSelectionDirector(r *http.Request) {
Str("routeType", string(rt)). Str("routeType", string(rt)).
Msg("director found") Msg("director found")
r = r.WithContext(policy.ContextSetPolicy(r.Context(), pol))
p.Directors[pol][rt][endpoint](r) p.Directors[pol][rt][endpoint](r)
return return
} }