forked from openshift/origin
/
oauthbasic.go
29 lines (23 loc) · 850 Bytes
/
oauthbasic.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package headers
import "net/http"
const (
authzHeader = "Authorization"
copyAuthzHeader = "oauth.openshift.io:" + authzHeader // will never conflict because : is not a valid header key
)
func WithPreserveAuthorizationHeader(handler http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if vv, ok := r.Header[authzHeader]; ok {
r.Header[copyAuthzHeader] = vv // capture the values before they are deleted
}
handler.ServeHTTP(w, r)
})
}
func WithRestoreAuthorizationHeader(handler http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if vv, ok := r.Header[copyAuthzHeader]; ok {
r.Header[authzHeader] = vv // add them back afterwards for use in OAuth flows
delete(r.Header, copyAuthzHeader)
}
handler.ServeHTTP(w, r)
})
}