github.com/franc20/ayesa_sap@v7.0.0-beta.28.0.20200124003224-302d4d52fa6c+incompatible/command/v6/oauth_token_command.go (about) 1 package v6 2 3 import ( 4 "errors" 5 "time" 6 7 "code.cloudfoundry.org/cli/actor/sharedaction" 8 "code.cloudfoundry.org/cli/actor/v2action" 9 "code.cloudfoundry.org/cli/api/uaa/constant" 10 "code.cloudfoundry.org/cli/command" 11 "code.cloudfoundry.org/cli/command/v6/shared" 12 "github.com/SermoDigital/jose/jwt" 13 ) 14 15 //go:generate counterfeiter . OauthTokenActor 16 17 type OauthTokenActor interface { 18 RefreshAccessToken(refreshToken string) (string, error) 19 ParseAccessToken(accessToken string) (jwt.JWT, error) 20 } 21 22 type OauthTokenCommand struct { 23 usage interface{} `usage:"CF_NAME oauth-token"` 24 relatedCommands interface{} `related_commands:"curl"` 25 26 UI command.UI 27 Config command.Config 28 SharedActor command.SharedActor 29 Actor OauthTokenActor 30 } 31 32 func (cmd *OauthTokenCommand) Setup(config command.Config, ui command.UI) error { 33 cmd.UI = ui 34 cmd.Config = config 35 cmd.SharedActor = sharedaction.NewActor(config) 36 37 ccClient, uaaClient, err := shared.GetNewClientsAndConnectToCF(config, ui) 38 if err != nil { 39 return err 40 } 41 cmd.Actor = v2action.NewActor(ccClient, uaaClient, config) 42 43 return nil 44 } 45 46 func (cmd OauthTokenCommand) Execute(_ []string) error { 47 err := cmd.SharedActor.CheckTarget(false, false) 48 if err != nil { 49 return err 50 } 51 52 if cmd.Config.UAAGrantType() == string(constant.GrantTypeClientCredentials) && cmd.Config.UAAOAuthClientSecret() == "" { 53 token, err := cmd.Actor.ParseAccessToken(cmd.Config.AccessToken()) 54 if err != nil { 55 return errors.New(cmd.UI.TranslateText("Access token is invalid.")) 56 } 57 58 expiration, success := token.Claims().Expiration() 59 if !success { 60 return errors.New(cmd.UI.TranslateText("Access token is missing expiration claim.")) 61 } 62 63 if expiration.Before(time.Now()) { 64 return errors.New(cmd.UI.TranslateText("Access token has expired.")) 65 } 66 67 cmd.UI.DisplayText(cmd.Config.AccessToken()) 68 return nil 69 } 70 71 accessToken, err := cmd.Actor.RefreshAccessToken(cmd.Config.RefreshToken()) 72 if err != nil { 73 return err 74 } 75 76 cmd.UI.DisplayText(accessToken) 77 return nil 78 }