@@ -65,7 +65,7 @@ func (s *Server) redirectError(w http.ResponseWriter, req *AuthorizeRequest, err
6565 uerr = err
6666 return
6767 }
68- data , _ := s .GetErrorData (err )
68+ data , _ , _ := s .GetErrorData (err )
6969 err = s .redirect (w , req , data )
7070 return
7171}
@@ -81,16 +81,21 @@ func (s *Server) redirect(w http.ResponseWriter, req *AuthorizeRequest, data map
8181}
8282
8383func (s * Server ) tokenError (w http.ResponseWriter , err error ) (uerr error ) {
84- data , statusCode := s .GetErrorData (err )
85- uerr = s .token (w , data , statusCode )
84+ data , statusCode , header := s .GetErrorData (err )
85+
86+ uerr = s .token (w , data , header , statusCode )
8687 return
8788}
8889
89- func (s * Server ) token (w http.ResponseWriter , data map [string ]interface {}, statusCode ... int ) (err error ) {
90+ func (s * Server ) token (w http.ResponseWriter , data map [string ]interface {}, header http. Header , statusCode ... int ) (err error ) {
9091 w .Header ().Set ("Content-Type" , "application/json;charset=UTF-8" )
9192 w .Header ().Set ("Cache-Control" , "no-store" )
9293 w .Header ().Set ("Pragma" , "no-cache" )
9394
95+ for key := range header {
96+ w .Header ().Set (key , header .Get (key ))
97+ }
98+
9499 status := http .StatusOK
95100 if len (statusCode ) > 0 && statusCode [0 ] > 0 {
96101 status = statusCode [0 ]
@@ -490,38 +495,45 @@ func (s *Server) HandleTokenRequest(w http.ResponseWriter, r *http.Request) (err
490495 err = s .tokenError (w , verr )
491496 return
492497 }
493- err = s .token (w , s .GetTokenData (ti ))
498+
499+ err = s .token (w , s .GetTokenData (ti ), nil )
494500 return
495501}
496502
497503// GetErrorData get error response data
498- func (s * Server ) GetErrorData (err error ) (data map [string ]interface {}, statusCode int ) {
499- re := & errors.Response {}
504+ func (s * Server ) GetErrorData (err error ) (data map [string ]interface {}, statusCode int , header http. Header ) {
505+ re := new ( errors.Response )
500506
501507 if v , ok := errors .Descriptions [err ]; ok {
502508 re .Error = err
503509 re .Description = v
504510 re .StatusCode = errors .StatusCodes [err ]
505511 } else {
506512 if fn := s .InternalErrorHandler ; fn != nil {
507- fn (err )
513+ if vre := fn (err ); vre != nil {
514+ re = vre
515+ }
516+ }
517+
518+ if re .Error == nil {
519+ re .Error = errors .ErrServerError
520+ re .Description = errors .Descriptions [errors .ErrServerError ]
521+ re .StatusCode = errors .StatusCodes [errors .ErrServerError ]
508522 }
509523 }
510524
511525 if fn := s .ResponseErrorHandler ; fn != nil {
512- if vre := fn (err ); vre != nil {
513- re = vre
526+ fn (re )
527+
528+ if re == nil {
529+ re = new (errors.Response )
514530 }
515531 }
516532
517- if re .Error == nil {
518- re .Error = errors .ErrServerError
519- re .Description = errors .Descriptions [errors .ErrServerError ]
520- re .StatusCode = errors .StatusCodes [errors .ErrServerError ]
521- }
533+ data = make (map [string ]interface {})
522534
523- data = map [ string ] interface {} {
524- "error" : re .Error . Error (),
535+ if err := re . Error ; err != nil {
536+ data [ "error" ] = err .Error ()
525537 }
526538
527539 if v := re .ErrorCode ; v != 0 {
@@ -536,11 +548,13 @@ func (s *Server) GetErrorData(err error) (data map[string]interface{}, statusCod
536548 data ["error_uri" ] = v
537549 }
538550
539- statusCode = 400
551+ header = re . Header
540552
553+ statusCode = http .StatusInternalServerError
541554 if v := re .StatusCode ; v > 0 {
542555 statusCode = v
543556 }
557+
544558 return
545559}
546560
0 commit comments