@@ -144,9 +144,11 @@ func (m *Manager) GenerateAuthToken(rt oauth2.ResponseType, tgr *oauth2.TokenGen
144144 cli , err := m .GetClient (tgr .ClientID )
145145 if err != nil {
146146 return
147- } else if verr := m .validateURI (cli .GetDomain (), tgr .RedirectURI ); verr != nil {
148- err = verr
149- return
147+ } else if tgr .RedirectURI != "" {
148+ if verr := m .validateURI (cli .GetDomain (), tgr .RedirectURI ); verr != nil {
149+ err = verr
150+ return
151+ }
150152 }
151153
152154 ti := models .NewToken ()
@@ -236,17 +238,46 @@ func (m *Manager) delAuthorizationCode(code string) (err error) {
236238 return
237239}
238240
241+ // get and delete authorization code data
242+ func (m * Manager ) getAndDelAuthorizationCode (tgr * oauth2.TokenGenerateRequest ) (info oauth2.TokenInfo , err error ) {
243+ code := tgr .Code
244+ ti , err := m .getAuthorizationCode (code )
245+ if err != nil {
246+ return
247+ } else if ti .GetClientID () != tgr .ClientID {
248+ err = errors .ErrInvalidAuthorizeCode
249+ return
250+ } else if codeURI := ti .GetRedirectURI (); codeURI != "" && codeURI != tgr .RedirectURI {
251+ err = errors .ErrInvalidAuthorizeCode
252+ return
253+ }
254+
255+ err = m .delAuthorizationCode (code )
256+ if err != nil {
257+ return
258+ }
259+ info = ti
260+ return
261+ }
262+
239263// GenerateAccessToken generate the access token
240264func (m * Manager ) GenerateAccessToken (gt oauth2.GrantType , tgr * oauth2.TokenGenerateRequest ) (accessToken oauth2.TokenInfo , err error ) {
241- if gt == oauth2 .AuthorizationCode {
242- ti , terr := m .getAuthorizationCode (tgr .Code )
243- if terr != nil {
244- err = terr
245- return
246- } else if ti .GetRedirectURI () != tgr .RedirectURI || ti .GetClientID () != tgr .ClientID {
247- err = errors .ErrInvalidAuthorizeCode
265+ cli , err := m .GetClient (tgr .ClientID )
266+ if err != nil {
267+ return
268+ } else if tgr .ClientSecret != cli .GetSecret () {
269+ err = errors .ErrInvalidClient
270+ return
271+ } else if tgr .RedirectURI != "" {
272+ if verr := m .validateURI (cli .GetDomain (), tgr .RedirectURI ); verr != nil {
273+ err = verr
248274 return
249- } else if verr := m .delAuthorizationCode (tgr .Code ); verr != nil {
275+ }
276+ }
277+
278+ if gt == oauth2 .AuthorizationCode {
279+ ti , verr := m .getAndDelAuthorizationCode (tgr )
280+ if verr != nil {
250281 err = verr
251282 return
252283 }
@@ -257,14 +288,6 @@ func (m *Manager) GenerateAccessToken(gt oauth2.GrantType, tgr *oauth2.TokenGene
257288 }
258289 }
259290
260- cli , err := m .GetClient (tgr .ClientID )
261- if err != nil {
262- return
263- } else if tgr .ClientSecret != cli .GetSecret () {
264- err = errors .ErrInvalidClient
265- return
266- }
267-
268291 ti := models .NewToken ()
269292 ti .SetClientID (tgr .ClientID )
270293 ti .SetUserID (tgr .UserID )
0 commit comments