github.com/argoproj/argo-cd/v3@v3.2.1/cmd/argocd/commands/relogin.go (about) 1 package commands 2 3 import ( 4 "fmt" 5 "os" 6 7 "github.com/coreos/go-oidc/v3/oidc" 8 log "github.com/sirupsen/logrus" 9 "github.com/spf13/cobra" 10 11 "github.com/argoproj/argo-cd/v3/cmd/argocd/commands/headless" 12 argocdclient "github.com/argoproj/argo-cd/v3/pkg/apiclient" 13 settingspkg "github.com/argoproj/argo-cd/v3/pkg/apiclient/settings" 14 "github.com/argoproj/argo-cd/v3/util/errors" 15 utilio "github.com/argoproj/argo-cd/v3/util/io" 16 "github.com/argoproj/argo-cd/v3/util/localconfig" 17 "github.com/argoproj/argo-cd/v3/util/session" 18 ) 19 20 // NewReloginCommand returns a new instance of `argocd relogin` command 21 func NewReloginCommand(globalClientOpts *argocdclient.ClientOptions) *cobra.Command { 22 var ( 23 password string 24 callback string 25 ssoPort int 26 ssoLaunchBrowser bool 27 ) 28 command := &cobra.Command{ 29 Use: "relogin", 30 Short: "Refresh an expired authenticate token", 31 Long: "Refresh an expired authenticate token", 32 Run: func(c *cobra.Command, args []string) { 33 ctx := c.Context() 34 35 if len(args) != 0 { 36 c.HelpFunc()(c, args) 37 os.Exit(1) 38 } 39 localCfg, err := localconfig.ReadLocalConfig(globalClientOpts.ConfigPath) 40 errors.CheckError(err) 41 if localCfg == nil { 42 log.Fatalf("No context found. Login using `argocd login`") 43 } 44 configCtx, err := localCfg.ResolveContext(localCfg.CurrentContext) 45 errors.CheckError(err) 46 47 var tokenString string 48 var refreshToken string 49 clientOpts := argocdclient.ClientOptions{ 50 ConfigPath: "", 51 ServerAddr: configCtx.Server.Server, 52 Insecure: configCtx.Server.Insecure, 53 ClientCertFile: globalClientOpts.ClientCertFile, 54 ClientCertKeyFile: globalClientOpts.ClientCertKeyFile, 55 GRPCWeb: globalClientOpts.GRPCWeb, 56 GRPCWebRootPath: globalClientOpts.GRPCWebRootPath, 57 PlainText: configCtx.Server.PlainText, 58 Headers: globalClientOpts.Headers, 59 } 60 acdClient := headless.NewClientOrDie(&clientOpts, c) 61 claims, err := configCtx.User.Claims() 62 errors.CheckError(err) 63 if claims.Issuer == session.SessionManagerClaimsIssuer { 64 fmt.Printf("Relogging in as '%s'\n", localconfig.GetUsername(claims.Subject)) 65 tokenString = passwordLogin(ctx, acdClient, localconfig.GetUsername(claims.Subject), password) 66 } else { 67 fmt.Println("Reinitiating SSO login") 68 setConn, setIf := acdClient.NewSettingsClientOrDie() 69 defer utilio.Close(setConn) 70 httpClient, err := acdClient.HTTPClient() 71 errors.CheckError(err) 72 ctx = oidc.ClientContext(ctx, httpClient) 73 acdSet, err := setIf.Get(ctx, &settingspkg.SettingsQuery{}) 74 errors.CheckError(err) 75 oauth2conf, provider, err := acdClient.OIDCConfig(ctx, acdSet) 76 errors.CheckError(err) 77 tokenString, refreshToken = oauth2Login(ctx, callback, ssoPort, acdSet.GetOIDCConfig(), oauth2conf, provider, ssoLaunchBrowser) 78 } 79 80 localCfg.UpsertUser(localconfig.User{ 81 Name: localCfg.CurrentContext, 82 AuthToken: tokenString, 83 RefreshToken: refreshToken, 84 }) 85 err = localconfig.WriteLocalConfig(*localCfg, globalClientOpts.ConfigPath) 86 errors.CheckError(err) 87 fmt.Printf("Context '%s' updated\n", localCfg.CurrentContext) 88 }, 89 Example: ` 90 # Reinitiates the login with previous contexts 91 argocd relogin 92 93 # Reinitiates the login with password 94 argocd relogin --password YOUR_PASSWORD 95 96 # Configure direct access using Kubernetes API server 97 argocd login cd.argoproj.io --core 98 99 # If user logged in with - "argocd login cd.argoproj.io" with sso login 100 # The command - "argocd relogin" will Reinitiates SSO login and updates the server context`, 101 } 102 command.Flags().StringVar(&password, "password", "", "The password of an account to authenticate") 103 command.Flags().IntVar(&ssoPort, "sso-port", DefaultSSOLocalPort, "Port to run local OAuth2 login application") 104 command.Flags().StringVar(&callback, "callback", "", "Host and Port for the callback URL") 105 command.Flags().BoolVar(&ssoLaunchBrowser, "sso-launch-browser", true, "Automatically launch the default browser when performing SSO login") 106 return command 107 }