Skip to content

Commit b3af9ce

Browse files
authored
Merge pull request #206 from clowre/master
Added an error handler that is invoked before s.redirectError
2 parents 79d5489 + 69dfd47 commit b3af9ce

File tree

3 files changed

+22
-5
lines changed

3 files changed

+22
-5
lines changed

server/handler.go

+3
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@ type (
3737
// InternalErrorHandler internal error handing
3838
InternalErrorHandler func(err error) (re *errors.Response)
3939

40+
// PreRedirectErrorHandler is used to override "redirect-on-error" behavior
41+
PreRedirectErrorHandler func(w http.ResponseWriter, req *AuthorizeRequest, err error) error
42+
4043
// AuthorizeScopeHandler set the authorized scope
4144
AuthorizeScopeHandler func(w http.ResponseWriter, r *http.Request) (scope string, err error)
4245

server/server.go

+13-3
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ type Server struct {
4848
UserAuthorizationHandler UserAuthorizationHandler
4949
PasswordAuthorizationHandler PasswordAuthorizationHandler
5050
RefreshingValidationHandler RefreshingValidationHandler
51+
PreRedirectErrorHandler PreRedirectErrorHandler
5152
RefreshingScopeHandler RefreshingScopeHandler
5253
ResponseErrorHandler ResponseErrorHandler
5354
InternalErrorHandler InternalErrorHandler
@@ -57,10 +58,19 @@ type Server struct {
5758
ResponseTokenHandler ResponseTokenHandler
5859
}
5960

61+
func (s *Server) handleError(w http.ResponseWriter, req *AuthorizeRequest, err error) error {
62+
if fn := s.PreRedirectErrorHandler; fn != nil {
63+
return fn(w, req, err)
64+
}
65+
66+
return s.redirectError(w, req, err)
67+
}
68+
6069
func (s *Server) redirectError(w http.ResponseWriter, req *AuthorizeRequest, err error) error {
6170
if req == nil {
6271
return err
6372
}
73+
6474
data, _, _ := s.GetErrorData(err)
6575
return s.redirect(w, req, data)
6676
}
@@ -257,13 +267,13 @@ func (s *Server) HandleAuthorizeRequest(w http.ResponseWriter, r *http.Request)
257267

258268
req, err := s.ValidationAuthorizeRequest(r)
259269
if err != nil {
260-
return s.redirectError(w, req, err)
270+
return s.handleError(w, req, err)
261271
}
262272

263273
// user authorization
264274
userID, err := s.UserAuthorizationHandler(w, r)
265275
if err != nil {
266-
return s.redirectError(w, req, err)
276+
return s.handleError(w, req, err)
267277
} else if userID == "" {
268278
return nil
269279
}
@@ -290,7 +300,7 @@ func (s *Server) HandleAuthorizeRequest(w http.ResponseWriter, r *http.Request)
290300

291301
ti, err := s.GetAuthorizeToken(ctx, req)
292302
if err != nil {
293-
return s.redirectError(w, req, err)
303+
return s.handleError(w, req, err)
294304
}
295305

296306
// If the redirect URI is empty, the default domain provided by the client is used.

server/server_config.go

+6-2
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@ func (s *Server) SetRefreshingValidationHandler(handler RefreshingValidationHand
5959
s.RefreshingValidationHandler = handler
6060
}
6161

62-
6362
// SetResponseErrorHandler response error handling
6463
func (s *Server) SetResponseErrorHandler(handler ResponseErrorHandler) {
6564
s.ResponseErrorHandler = handler
@@ -70,6 +69,11 @@ func (s *Server) SetInternalErrorHandler(handler InternalErrorHandler) {
7069
s.InternalErrorHandler = handler
7170
}
7271

72+
// SetPreRedirectErrorHandler sets the PreRedirectErrorHandler in current Server instance
73+
func (s *Server) SetPreRedirectErrorHandler(handler PreRedirectErrorHandler) {
74+
s.PreRedirectErrorHandler = handler
75+
}
76+
7377
// SetExtensionFieldsHandler in response to the access token with the extension of the field
7478
func (s *Server) SetExtensionFieldsHandler(handler ExtensionFieldsHandler) {
7579
s.ExtensionFieldsHandler = handler
@@ -88,4 +92,4 @@ func (s *Server) SetAuthorizeScopeHandler(handler AuthorizeScopeHandler) {
8892
// SetResponseTokenHandler response token handing
8993
func (s *Server) SetResponseTokenHandler(handler ResponseTokenHandler) {
9094
s.ResponseTokenHandler = handler
91-
}
95+
}

0 commit comments

Comments
 (0)