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  }