github.com/kubeshop/testkube@v1.17.23/cmd/kubectl-testkube/commands/oauth/config.go (about) 1 package oauth 2 3 import ( 4 "fmt" 5 6 "github.com/spf13/cobra" 7 8 "github.com/kubeshop/testkube/cmd/kubectl-testkube/config" 9 "github.com/kubeshop/testkube/pkg/oauth" 10 poauth "github.com/kubeshop/testkube/pkg/oauth" 11 "github.com/kubeshop/testkube/pkg/ui" 12 ) 13 14 // NewConfigureOAuthCmd is oauth config config cmd 15 func NewConfigureOAuthCmd() *cobra.Command { 16 var ( 17 providerType string 18 clientID string 19 clientSecret string 20 scopes []string 21 ) 22 23 cmd := &cobra.Command{ 24 Use: "oauth <value>", 25 Short: "Set oauth credentials for api uri in testkube client", 26 Args: func(cmd *cobra.Command, args []string) error { 27 if len(args) < 1 { 28 return fmt.Errorf("please pass valid api uri value") 29 } 30 31 values := map[string]string{ 32 "client id": clientID, 33 "client secret": clientSecret, 34 } 35 36 for key, value := range values { 37 if value == "" { 38 return fmt.Errorf("please pass valid %s value", key) 39 } 40 } 41 42 provider := poauth.NewProvider(clientID, clientSecret, scopes) 43 if _, err := provider.GetValidator(poauth.ProviderType(providerType)); err != nil { 44 return err 45 } 46 47 return nil 48 }, 49 Run: func(cmd *cobra.Command, args []string) { 50 cfg, err := config.Load() 51 ui.ExitOnError("loading config file", err) 52 53 cfg.APIURI = args[0] 54 cfg.OAuth2Data.Provider = poauth.ProviderType(providerType) 55 cfg.OAuth2Data.ClientID = clientID 56 cfg.OAuth2Data.ClientSecret = clientSecret 57 cfg.OAuth2Data.Scopes = scopes 58 59 provider := poauth.NewProvider(clientID, clientSecret, scopes) 60 client, err := provider.AuthenticateUser(poauth.ProviderType(providerType)) 61 ui.ExitOnError("authenticating user", err) 62 63 cfg.OAuth2Data.Token = client.Token 64 cfg.EnableOAuth() 65 err = config.Save(cfg) 66 ui.ExitOnError("saving config file", err) 67 ui.Success("New api uri set to", cfg.APIURI) 68 ui.Success("New oauth token", cfg.OAuth2Data.Token.AccessToken) 69 }, 70 } 71 72 cmd.Flags().StringVar(&providerType, "provider", string(oauth.GithubProviderType), "authentication provider, currently available: github") 73 cmd.Flags().StringVar(&clientID, "client-id", "", "client id for authentication provider") 74 cmd.Flags().StringVar(&clientSecret, "client-secret", "", "client secret for authentication provider") 75 cmd.Flags().StringArrayVar(&scopes, "scope", nil, "scope for authentication provider") 76 77 return cmd 78 }