@@ -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+
6069func (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.
0 commit comments