@@ -511,23 +511,45 @@ func TestBasicAuthWithEmail(t *testing.T) {
511511 assert.Equal(t, expectedEmailHeader, req.Header["Authorization"][0])
512512 assert.Equal(t, emailAddress, req.Header["X-Forwarded-User"][0])
513513 }
514+}
514515
516+func TestPassUserHeadersWithEmail(t *testing.T) {
517+ opts := NewOptions()
518+ opts.PassBasicAuth = false
515519 opts.PassUserHeaders = true
520+ opts.PreferEmailToUser = false
521+ opts.Validate()
522+
523+ const emailAddress = "john.doe@example.com"
524+ const userName = "9fcab5c9b889a557"
525+
526+ session := &sessions.SessionState{
527+ User: userName,
528+ Email: emailAddress,
529+ AccessToken: "oauth_token",
530+ CreatedAt: time.Now(),
531+ }
516532 {
517− // PassUserHeaders takes predecense over the headers added by
518− // PassBasicAuth, thus we expect them to contain something else.
519533 rw := httptest.NewRecorder()
520− req, _ := http.NewRequest("GET", opts.ProxyPrefix+"/testCase2", nil)
534+ req, _ := http.NewRequest("GET", opts.ProxyPrefix+"/testCase0", nil)
521535 proxy := NewOAuthProxy(opts, func(email string) bool {
522536 return email == emailAddress
523537 })
524−
525538 proxy.addHeadersForProxying(rw, req, session)
526− // The user address here should still be an email.
527− assert.Equal(t, expectedEmailHeader, req.Header["Authorization"][0])
528− assert.Equal(t, emailAddress, req.Header["X-Forwarded-Email"][0])
529539 assert.Equal(t, userName, req.Header["X-Forwarded-User"][0])
530540 }
541+
542+ opts.PreferEmailToUser = true
543+ {
544+ rw := httptest.NewRecorder()
545+ req, _ := http.NewRequest("GET", opts.ProxyPrefix+"/testCase1", nil)
546+
547+ proxy := NewOAuthProxy(opts, func(email string) bool {
548+ return email == emailAddress
549+ })
550+ proxy.addHeadersForProxying(rw, req, session)
551+ assert.Equal(t, emailAddress, req.Header["X-Forwarded-User"][0])
552+ }
531553}
532554
533555type PassAccessTokenTest struct {