github.com/RichardKnop/go-oauth2-server@v1.0.5-0.20201019163316-d02a401490d0/oauth/grant_type_authorization_code.go (about) 1 package oauth 2 3 import ( 4 "errors" 5 "net/http" 6 7 "github.com/RichardKnop/go-oauth2-server/models" 8 "github.com/RichardKnop/go-oauth2-server/oauth/tokentypes" 9 ) 10 11 var ( 12 // ErrInvalidRedirectURI ... 13 ErrInvalidRedirectURI = errors.New("Invalid redirect URI") 14 ) 15 16 func (s *Service) authorizationCodeGrant(r *http.Request, client *models.OauthClient) (*AccessTokenResponse, error) { 17 // Fetch the authorization code 18 authorizationCode, err := s.getValidAuthorizationCode( 19 r.Form.Get("code"), 20 r.Form.Get("redirect_uri"), 21 client, 22 ) 23 if err != nil { 24 return nil, err 25 } 26 27 // Log in the user 28 accessToken, refreshToken, err := s.Login( 29 authorizationCode.Client, 30 authorizationCode.User, 31 authorizationCode.Scope, 32 ) 33 if err != nil { 34 return nil, err 35 } 36 37 // Delete the authorization code 38 s.db.Unscoped().Delete(&authorizationCode) 39 40 // Create response 41 accessTokenResponse, err := NewAccessTokenResponse( 42 accessToken, 43 refreshToken, 44 s.cnf.Oauth.AccessTokenLifetime, 45 tokentypes.Bearer, 46 ) 47 if err != nil { 48 return nil, err 49 } 50 51 return accessTokenResponse, nil 52 }