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 }