git.iko.soy/typeable/oauth2-proxy
on master help sign in
Make claims list of strings
commit70990327d187920c327cedfb847c0cecf70a0a4f authorJoel Speed <joel.speed@hotmail.co.uk> dateSat 3 Oct 2020, 18:57 (6 years ago) parentc9b3422
2 files changed+33−26
pkg/apis/sessions/session_state.go+14−13 pkg/header/injector.go+19−13
pkg/apis/sessions/session_state.go+14−13
@@ -8,7 +8,6 @@ import (
88 "io"
99 "io/ioutil"
1010 "reflect"
11− "strings"
1211 "time"
1312 "unicode/utf8"
1413
@@ -70,31 +69,33 @@ func (s *SessionState) String() string {
7069 return o + "}"
7170}
7271
73−func (s *SessionState) GetClaim(claim string) string {
72+func (s *SessionState) GetClaim(claim string) []string {
7473 if s == nil {
75− return ""
74+ return []string{}
7675 }
7776 switch claim {
7877 case "access_token":
79− return s.AccessToken
78+ return []string{s.AccessToken}
8079 case "id_token":
81− return s.IDToken
80+ return []string{s.IDToken}
8281 case "created_at":
83− return s.CreatedAt.String()
82+ return []string{s.CreatedAt.String()}
8483 case "expires_on":
85− return s.ExpiresOn.String()
84+ return []string{s.ExpiresOn.String()}
8685 case "refresh_token":
87− return s.RefreshToken
86+ return []string{s.RefreshToken}
8887 case "email":
89− return s.Email
88+ return []string{s.Email}
9089 case "user":
91− return s.User
90+ return []string{s.User}
9291 case "groups":
93− return strings.Join(s.Groups, ",")
92+ groups := make([]string, len(s.Groups))
93+ copy(groups, s.Groups)
94+ return groups
9495 case "preferred_username":
95− return s.PreferredUsername
96+ return []string{s.PreferredUsername}
9697 default:
97− return ""
98+ return []string{}
9899 }
99100}
100101
pkg/header/injector.go+19−13
@@ -85,28 +85,34 @@ func newClaimInjector(name string, source *options.ClaimSource) (valueInjector,
8585 return nil, fmt.Errorf("error loading basicAuthPassword: %v", err)
8686 }
8787 return newInjectorFunc(func(header http.Header, session *sessionsapi.SessionState) {
88− claim := session.GetClaim(source.Claim)
89− if claim == "" {
90− return
88+ claimValues := session.GetClaim(source.Claim)
89+ for _, claim := range claimValues {
90+ if claim == "" {
91+ continue
92+ }
93+ auth := claim + ":" + string(password)
94+ header.Add(name, "Basic "+base64.StdEncoding.EncodeToString([]byte(auth)))
9195 }
92− auth := claim + ":" + string(password)
93− header.Add(name, "Basic "+base64.StdEncoding.EncodeToString([]byte(auth)))
9496 }), nil
9597 case source.Prefix != "":
9698 return newInjectorFunc(func(header http.Header, session *sessionsapi.SessionState) {
97− claim := session.GetClaim(source.Claim)
98− if claim == "" {
99− return
99+ claimValues := session.GetClaim(source.Claim)
100+ for _, claim := range claimValues {
101+ if claim == "" {
102+ continue
103+ }
104+ header.Add(name, source.Prefix+claim)
100105 }
101− header.Add(name, source.Prefix+claim)
102106 }), nil
103107 default:
104108 return newInjectorFunc(func(header http.Header, session *sessionsapi.SessionState) {
105− claim := session.GetClaim(source.Claim)
106− if claim == "" {
107− return
109+ claimValues := session.GetClaim(source.Claim)
110+ for _, claim := range claimValues {
111+ if claim == "" {
112+ continue
113+ }
114+ header.Add(name, claim)
108115 }
109− header.Add(name, claim)
110116 }), nil
111117 }
112118}