@@ -126,8 +126,7 @@ func (s *Server) ValidationAuthorizeRequest(r *http.Request) (req *AuthorizeRequ
126126// GetAuthorizeToken Get authorization token(code)
127127func (s * Server ) GetAuthorizeToken (req * AuthorizeRequest ) (ti oauth2.TokenInfo , rerr , ierr error ) {
128128 if req .RedirectURI == "" ||
129- req .ClientID == "" ||
130- req .UserID == "" {
129+ req .ClientID == "" {
131130 rerr = errors .ErrInvalidRequest
132131 return
133132 } else if req .ResponseType == "" {
@@ -231,9 +230,6 @@ func (s *Server) GetErrorData(rerr, ierr error) (data map[string]interface{}) {
231230 err = rerr
232231 ierr = rerr
233232 }
234- if err == nil {
235- return
236- }
237233 if fn := s .ErrorHandler ; fn != nil {
238234 s .ErrorHandler (err )
239235 }
@@ -243,47 +239,52 @@ func (s *Server) GetErrorData(rerr, ierr error) (data map[string]interface{}) {
243239 return
244240}
245241
242+ func (s * Server ) resRedirectError (w http.ResponseWriter , req * AuthorizeRequest , rerr , ierr error ) (err error ) {
243+ if req == nil {
244+ err = ierr
245+ return
246+ }
247+ err = s .resRedirect (w , req , s .GetErrorData (rerr , ierr ))
248+ return
249+ }
250+
251+ func (s * Server ) resRedirect (w http.ResponseWriter , req * AuthorizeRequest , data map [string ]interface {}) (err error ) {
252+ uri , verr := s .GetRedirectURI (req , data )
253+ if verr != nil {
254+ err = verr
255+ return
256+ }
257+ w .Header ().Set ("Location" , uri )
258+ w .WriteHeader (302 )
259+ return
260+ }
261+
246262// HandleAuthorizeRequest The authorization request handling
247263func (s * Server ) HandleAuthorizeRequest (w http.ResponseWriter , r * http.Request ) (err error ) {
248- var (
249- ti oauth2.TokenInfo
250- req * AuthorizeRequest
251- rerr error
252- ierr error
253- )
254264 defer func () {
255265 if verr := recover (); verr != nil {
256266 err = fmt .Errorf ("%v" , verr )
257- return
258- }
259- data := s .GetErrorData (rerr , ierr )
260- if data != nil {
261- if req == nil {
262- err = ierr
263- return
264- }
265- } else {
266- data = s .GetAuthorizeData (req .ResponseType , ti )
267267 }
268- uri , verr := s .GetRedirectURI (req , data )
269- if verr != nil {
270- err = verr
271- return
272- }
273- w .Header ().Set ("Location" , uri )
274- w .WriteHeader (302 )
275268 }()
276- req , rerr , ierr = s .ValidationAuthorizeRequest (r )
269+ req , rerr , ierr : = s .ValidationAuthorizeRequest (r )
277270 if rerr != nil || ierr != nil {
271+ err = s .resRedirectError (w , req , rerr , ierr )
278272 return
279273 }
280274 userID , err := s .UserAuthorizationHandler (w , r )
281275 if err != nil {
282- ierr = err
276+ err = s .resRedirectError (w , req , nil , err )
277+ return
278+ } else if userID == "" {
283279 return
284280 }
285281 req .UserID = userID
286- ti , rerr , ierr = s .GetAuthorizeToken (req )
282+ ti , rerr , ierr := s .GetAuthorizeToken (req )
283+ if rerr != nil || ierr != nil {
284+ err = s .resRedirectError (w , req , rerr , ierr )
285+ return
286+ }
287+ err = s .resRedirect (w , req , s .GetAuthorizeData (req .ResponseType , ti ))
287288 return
288289}
289290
@@ -442,32 +443,37 @@ func (s *Server) GetTokenData(ti oauth2.TokenInfo) (data map[string]interface{})
442443 return
443444}
444445
446+ func (s * Server ) resTokenError (w http.ResponseWriter , rerr , ierr error ) (err error ) {
447+ err = s .resToken (w , s .GetErrorData (rerr , ierr ))
448+ return
449+ }
450+
451+ func (s * Server ) resToken (w http.ResponseWriter , data map [string ]interface {}) (err error ) {
452+ w .Header ().Set ("Content-Type" , "application/json;charset=UTF-8" )
453+ w .Header ().Set ("Cache-Control" , "no-store" )
454+ w .Header ().Set ("Pragma" , "no-cache" )
455+ w .WriteHeader (http .StatusOK )
456+ err = json .NewEncoder (w ).Encode (data )
457+ return
458+ }
459+
445460// HandleTokenRequest The token request handling
446461func (s * Server ) HandleTokenRequest (w http.ResponseWriter , r * http.Request ) (err error ) {
447- var (
448- ti oauth2.TokenInfo
449- rerr error
450- ierr error
451- )
452462 defer func () {
453463 if verr := recover (); verr != nil {
454464 err = fmt .Errorf ("%v" , verr )
455- return
456465 }
457- data := s .GetErrorData (rerr , ierr )
458- if data == nil {
459- data = s .GetTokenData (ti )
460- }
461- w .Header ().Set ("Content-Type" , "application/json;charset=UTF-8" )
462- w .Header ().Set ("Cache-Control" , "no-store" )
463- w .Header ().Set ("Pragma" , "no-cache" )
464- w .WriteHeader (http .StatusOK )
465- err = json .NewEncoder (w ).Encode (data )
466466 }()
467467 gt , tgr , rerr , ierr := s .ValidationTokenRequest (r )
468468 if rerr != nil || ierr != nil {
469+ err = s .resTokenError (w , rerr , ierr )
470+ return
471+ }
472+ ti , rerr , ierr := s .GetAccessToken (gt , tgr )
473+ if rerr != nil || ierr != nil {
474+ err = s .resTokenError (w , rerr , ierr )
469475 return
470476 }
471- ti , rerr , ierr = s .GetAccessToken ( gt , tgr )
477+ err = s .resToken ( w , s . GetTokenData ( ti ) )
472478 return
473479}
0 commit comments