github.com/argoproj/argo-cd/v3@v3.2.1/cmd/argocd/commands/logout.go (about)

     1  package commands
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  
     7  	log "github.com/sirupsen/logrus"
     8  	"github.com/spf13/cobra"
     9  
    10  	"github.com/argoproj/argo-cd/v3/cmd/argocd/commands/utils"
    11  	argocdclient "github.com/argoproj/argo-cd/v3/pkg/apiclient"
    12  	"github.com/argoproj/argo-cd/v3/util/errors"
    13  	"github.com/argoproj/argo-cd/v3/util/localconfig"
    14  )
    15  
    16  // NewLogoutCommand returns a new instance of `argocd logout` command
    17  func NewLogoutCommand(globalClientOpts *argocdclient.ClientOptions) *cobra.Command {
    18  	command := &cobra.Command{
    19  		Use:   "logout CONTEXT",
    20  		Short: "Log out from Argo CD",
    21  		Long:  "Log out from Argo CD",
    22  		Example: `# Logout from the active Argo CD context
    23  # This can be helpful for security reasons or when you want to switch between different Argo CD contexts or accounts.
    24  argocd logout CONTEXT
    25  
    26  # Logout from a specific context named 'cd.argoproj.io'
    27  argocd logout cd.argoproj.io
    28  `,
    29  		Run: func(c *cobra.Command, args []string) {
    30  			if len(args) == 0 {
    31  				c.HelpFunc()(c, args)
    32  				os.Exit(1)
    33  			}
    34  			context := args[0]
    35  
    36  			localCfg, err := localconfig.ReadLocalConfig(globalClientOpts.ConfigPath)
    37  			errors.CheckError(err)
    38  			if localCfg == nil {
    39  				log.Fatalf("Nothing to logout from")
    40  			}
    41  
    42  			promptUtil := utils.NewPrompt(globalClientOpts.PromptsEnabled)
    43  
    44  			canLogout := promptUtil.Confirm(fmt.Sprintf("Are you sure you want to log out from '%s'?", context))
    45  			if canLogout {
    46  				ok := localCfg.RemoveToken(context)
    47  				if !ok {
    48  					log.Fatalf("Context %s does not exist", context)
    49  				}
    50  
    51  				err = localconfig.ValidateLocalConfig(*localCfg)
    52  				if err != nil {
    53  					log.Fatalf("Error in logging out: %s", err)
    54  				}
    55  				err = localconfig.WriteLocalConfig(*localCfg, globalClientOpts.ConfigPath)
    56  				errors.CheckError(err)
    57  
    58  				fmt.Printf("Logged out from '%s'\n", context)
    59  			} else {
    60  				log.Infof("Logout from '%s' cancelled", context)
    61  			}
    62  		},
    63  	}
    64  	return command
    65  }