@@ -48,6 +48,7 @@ type Server struct {
48
48
UserAuthorizationHandler UserAuthorizationHandler
49
49
PasswordAuthorizationHandler PasswordAuthorizationHandler
50
50
RefreshingValidationHandler RefreshingValidationHandler
51
+ PreRedirectErrorHandler PreRedirectErrorHandler
51
52
RefreshingScopeHandler RefreshingScopeHandler
52
53
ResponseErrorHandler ResponseErrorHandler
53
54
InternalErrorHandler InternalErrorHandler
@@ -57,10 +58,19 @@ type Server struct {
57
58
ResponseTokenHandler ResponseTokenHandler
58
59
}
59
60
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
+
60
69
func (s * Server ) redirectError (w http.ResponseWriter , req * AuthorizeRequest , err error ) error {
61
70
if req == nil {
62
71
return err
63
72
}
73
+
64
74
data , _ , _ := s .GetErrorData (err )
65
75
return s .redirect (w , req , data )
66
76
}
@@ -257,13 +267,13 @@ func (s *Server) HandleAuthorizeRequest(w http.ResponseWriter, r *http.Request)
257
267
258
268
req , err := s .ValidationAuthorizeRequest (r )
259
269
if err != nil {
260
- return s .redirectError (w , req , err )
270
+ return s .handleError (w , req , err )
261
271
}
262
272
263
273
// user authorization
264
274
userID , err := s .UserAuthorizationHandler (w , r )
265
275
if err != nil {
266
- return s .redirectError (w , req , err )
276
+ return s .handleError (w , req , err )
267
277
} else if userID == "" {
268
278
return nil
269
279
}
@@ -290,7 +300,7 @@ func (s *Server) HandleAuthorizeRequest(w http.ResponseWriter, r *http.Request)
290
300
291
301
ti , err := s .GetAuthorizeToken (ctx , req )
292
302
if err != nil {
293
- return s .redirectError (w , req , err )
303
+ return s .handleError (w , req , err )
294
304
}
295
305
296
306
// If the redirect URI is empty, the default domain provided by the client is used.
0 commit comments