8 "github.com/oauth2-proxy/oauth2-proxy/v7/pkg/apis/options"
9 "github.com/oauth2-proxy/oauth2-proxy/v7/pkg/apis/options/util"
10 sessionsapi "github.com/oauth2-proxy/oauth2-proxy/v7/pkg/apis/sessions"
13type Injector interface {
14 Inject(http.Header, *sessionsapi.SessionState)
18 valueInjectors []valueInjector
21func (i injector) Inject(header http.Header, session *sessionsapi.SessionState) {
22 for _, injector := range i.valueInjectors {
23 injector.inject(header, session)
27func NewInjector(headers []options.Header) (Injector, error) {
28 injectors := []valueInjector{}
29 for _, header := range headers {
30 for _, value := range header.Values {
31 injector, err := newValueinjector(header.Name, value)
33 return nil, fmt.Errorf("error building injector for header %q: %v", header.Name, err)
35 injectors = append(injectors, injector)
39 return &injector{valueInjectors: injectors}, nil
42type valueInjector interface {
43 inject(http.Header, *sessionsapi.SessionState)
46func newValueinjector(name string, value options.HeaderValue) (valueInjector, error) {
48 case value.SecretSource != nil && value.ClaimSource == nil:
49 return newSecretInjector(name, value.SecretSource)
50 case value.SecretSource == nil && value.ClaimSource != nil:
51 return newClaimInjector(name, value.ClaimSource)
53 return nil, fmt.Errorf("header %q value has multiple entries: only one entry per value is allowed", name)
57type injectorFunc struct {
58 injectFunc func(http.Header, *sessionsapi.SessionState)
61func (i *injectorFunc) inject(header http.Header, session *sessionsapi.SessionState) {
62 i.injectFunc(header, session)
65func newInjectorFunc(injectFunc func(header http.Header, session *sessionsapi.SessionState)) valueInjector {
66 return &injectorFunc{injectFunc: injectFunc}
69func newSecretInjector(name string, source *options.SecretSource) (valueInjector, error) {
70 value, err := util.GetSecretValue(source)
72 return nil, fmt.Errorf("error getting secret value: %v", err)
75 return newInjectorFunc(func(header http.Header, session *sessionsapi.SessionState) {
76 header.Add(name, string(value))
80func newClaimInjector(name string, source *options.ClaimSource) (valueInjector, error) {
82 case source.BasicAuthPassword != nil:
83 password, err := util.GetSecretValue(source.BasicAuthPassword)
85 return nil, fmt.Errorf("error loading basicAuthPassword: %v", err)
87 return newInjectorFunc(func(header http.Header, session *sessionsapi.SessionState) {
88 claimValues := session.GetClaim(source.Claim)
89 for _, claim := range claimValues {
93 auth := claim + ":" + string(password)
94 header.Add(name, "Basic "+base64.StdEncoding.EncodeToString([]byte(auth)))
97 case source.Prefix != "":
98 return newInjectorFunc(func(header http.Header, session *sessionsapi.SessionState) {
99 claimValues := session.GetClaim(source.Claim)
100 for _, claim := range claimValues {
104 header.Add(name, source.Prefix+claim)
108 return newInjectorFunc(func(header http.Header, session *sessionsapi.SessionState) {
109 claimValues := session.GetClaim(source.Claim)
110 for _, claim := range claimValues {
114 header.Add(name, claim)
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list