@@ -19,33 +19,53 @@ import (
1919// Headers retrieved to fetch user's email and group can be configured
2020// with userHeader and groupHeader.
2121type Config struct {
22- UserHeader string `json:"userHeader"`
23- GroupHeader string `json:"groupHeader"`
24- Groups []string `json:"staticGroups"`
22+ UserIdHeader string `json:"userIdHeader"`
23+ UserHeader string `json:"userHeader"`
24+ EmailHeader string `json:"emailHeader"`
25+ GroupHeader string `json:"groupHeader"`
26+ Groups []string `json:"staticGroups"`
2527}
2628
2729// Open returns an authentication strategy which requires no user interaction.
2830func (c * Config ) Open (id string , logger log.Logger ) (connector.Connector , error ) {
31+ userIdHeader := c .UserIdHeader
32+ if userIdHeader == "" {
33+ userIdHeader = "X-Remote-User-Id"
34+ }
2935 userHeader := c .UserHeader
3036 if userHeader == "" {
3137 userHeader = "X-Remote-User"
3238 }
39+ emailHeader := c .EmailHeader
40+ if emailHeader == "" {
41+ emailHeader = "X-Remote-User-Email"
42+ }
3343 groupHeader := c .GroupHeader
3444 if groupHeader == "" {
3545 groupHeader = "X-Remote-Group"
3646 }
3747
38- return & callback {userHeader : userHeader , groupHeader : groupHeader , logger : logger , pathSuffix : "/" + id , groups : c .Groups }, nil
48+ return & callback {
49+ userIdHeader : userIdHeader ,
50+ userHeader : userHeader ,
51+ emailHeader : emailHeader ,
52+ groupHeader : groupHeader ,
53+ groups : c .Groups ,
54+ logger : logger ,
55+ pathSuffix : "/" + id ,
56+ }, nil
3957}
4058
4159// Callback is a connector which returns an identity with the HTTP header
4260// X-Remote-User as verified email.
4361type callback struct {
44- userHeader string
45- groupHeader string
46- groups []string
47- logger log.Logger
48- pathSuffix string
62+ userIdHeader string
63+ userHeader string
64+ emailHeader string
65+ groupHeader string
66+ groups []string
67+ logger log.Logger
68+ pathSuffix string
4969}
5070
5171// LoginURL returns the URL to redirect the user to login with.
@@ -67,6 +87,14 @@ func (m *callback) HandleCallback(s connector.Scopes, r *http.Request) (connecto
6787 if remoteUser == "" {
6888 return connector.Identity {}, fmt .Errorf ("required HTTP header %s is not set" , m .userHeader )
6989 }
90+ remoteUserId := r .Header .Get (m .userIdHeader )
91+ if remoteUserId == "" {
92+ remoteUserId = remoteUser
93+ }
94+ remoteUserEmail := r .Header .Get (m .emailHeader )
95+ if remoteUserEmail == "" {
96+ remoteUserEmail = remoteUser
97+ }
7098 groups := m .groups
7199 headerGroup := r .Header .Get (m .groupHeader )
72100 if headerGroup != "" {
@@ -77,9 +105,10 @@ func (m *callback) HandleCallback(s connector.Scopes, r *http.Request) (connecto
77105 groups = append (splitheaderGroup , groups ... )
78106 }
79107 return connector.Identity {
80- UserID : remoteUser , // TODO: figure out if this is a bad ID value.
81- Email : remoteUser ,
82- EmailVerified : true ,
83- Groups : groups ,
108+ UserID : remoteUserId ,
109+ PreferredUsername : remoteUser ,
110+ Email : remoteUserEmail ,
111+ EmailVerified : true ,
112+ Groups : groups ,
84113 }, nil
85114}
0 commit comments