Skip to content

Commit a354226

Browse files
author
Matt Pryor
committed
Merge branch 'feature/authproxy-extra-headers' into stackhpc-release
2 parents b767cbd + 497483d commit a354226

File tree

1 file changed

+42
-13
lines changed

1 file changed

+42
-13
lines changed

connector/authproxy/authproxy.go

Lines changed: 42 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19,33 +19,53 @@ import (
1919
// Headers retrieved to fetch user's email and group can be configured
2020
// with userHeader and groupHeader.
2121
type 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.
2830
func (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.
4361
type 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

Comments
 (0)