git.iko.soy/typeable/oauth2-proxy
on master help sign in
Split session enrichment from code redemption
commitadd45c360ceeb6b12702f4f95dc447df72653393 authorNick Meves <nick.meves@greenhouse.io> dateSat 26 Sep 2020, 13:19 (6 years ago) parent8b44ddd
1 file changed+18−9
oauthproxy.go+18−9
oauthproxy.go+18−9
@@ -357,22 +357,24 @@ func (p *OAuthProxy) redeemCode(ctx context.Context, host, code string) (*sessio
357357 if err != nil {
358358 return nil, err
359359 }
360+ return s, nil
361+}
360362
363+func (p *OAuthProxy) enrichSession(ctx context.Context, s *sessionsapi.SessionState) error {
364+ var err error
361365 if s.Email == "" {
362366 s.Email, err = p.provider.GetEmailAddress(ctx, s)
363367 if err != nil && err.Error() != "not implemented" {
364− return nil, err
368+ return err
365369 }
366370 }
367−
368371 if s.User == "" {
369372 s.User, err = p.provider.GetUserName(ctx, s)
370373 if err != nil && err.Error() != "not implemented" {
371− return nil, err
374+ return err
372375 }
373376 }
374−
375− return s, nil
377+ return nil
376378}
377379
378380// MakeCSRFCookie creates a cookie for CSRF
@@ -829,14 +831,21 @@ func (p *OAuthProxy) OAuthCallback(rw http.ResponseWriter, req *http.Request) {
829831 return
830832 }
831833
832− s := strings.SplitN(req.Form.Get("state"), ":", 2)
833− if len(s) != 2 {
834+ err = p.enrichSession(req.Context(), session)
835+ if err != nil {
836+ logger.Errorf("Error creating session during OAuth2 callback: %v", err)
837+ p.ErrorPage(rw, http.StatusInternalServerError, "Internal Server Error", "Internal Error")
838+ return
839+ }
840+
841+ state := strings.SplitN(req.Form.Get("state"), ":", 2)
842+ if len(state) != 2 {
834843 logger.Error("Error while parsing OAuth2 state: invalid length")
835844 p.ErrorPage(rw, http.StatusInternalServerError, "Internal Server Error", "Invalid State")
836845 return
837846 }
838− nonce := s[0]
839− redirect := s[1]
847+ nonce := state[0]
848+ redirect := state[1]
840849 c, err := req.Cookie(p.CSRFCookieName)
841850 if err != nil {
842851 logger.PrintAuthf(session.Email, req, logger.AuthFailure, "Invalid authentication via OAuth2: unable to obtain CSRF cookie")