From d940ab3263cf9e52255d206f0f5f805ba183268a Mon Sep 17 00:00:00 2001 From: Sebastian Ohm Date: Tue, 27 Aug 2024 13:44:00 +0200 Subject: [PATCH 1/3] Fix default browser boolean semantics --- config/tokensource.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/tokensource.go b/config/tokensource.go index c3b18e85..48e9dee6 100644 --- a/config/tokensource.go +++ b/config/tokensource.go @@ -143,7 +143,7 @@ func (c *hcpConfig) getTokenSource() (oauth2.TokenSource, sourceType, string, er var loginTokenSource oauth2.TokenSource if !c.noBrowserLogin { - loginTokenSource = auth.NewBrowserLogin(&c.oauth2Config, c.noDefaultBrowser) + loginTokenSource = auth.NewBrowserLogin(&c.oauth2Config, !c.noDefaultBrowser) } return loginTokenSource, sourceTypeLogin, "", nil From 8ed7c3a84f85cf5f0373b3386afdcf196564767c Mon Sep 17 00:00:00 2001 From: Sebastian Ohm Date: Wed, 28 Aug 2024 11:57:36 +0200 Subject: [PATCH 2/3] Rename variables for clarity --- auth/browser.go | 20 ++++++++++---------- config/tokensource.go | 2 +- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/auth/browser.go b/auth/browser.go index 140260ec..c2f79290 100644 --- a/auth/browser.go +++ b/auth/browser.go @@ -23,29 +23,29 @@ import ( type browserLogin struct { oauthConfig *oauth2.Config - // Wether to open a browser in an external window or not. - openBrowser bool + // Wether to open the default browser in an external window. + noDefaultBrowser bool } // NewBrowserLogin will return an oauth2.TokenSource that will return a Token from an interactive browser login. -func NewBrowserLogin(oauthConfig *oauth2.Config, openBrowser bool) *browserLogin { +func NewBrowserLogin(oauthConfig *oauth2.Config, noDefaultBrowser bool) *browserLogin { return &browserLogin{ - oauthConfig: oauthConfig, - openBrowser: openBrowser, + oauthConfig: oauthConfig, + noDefaultBrowser: noDefaultBrowser, } } // Token will return an oauth2.Token retrieved from an interactive browser login. func (b *browserLogin) Token() (*oauth2.Token, error) { browser := &oauthBrowser{} - return browser.GetTokenFromBrowser(context.Background(), b.oauthConfig, b.openBrowser) + return browser.GetTokenFromBrowser(context.Background(), b.oauthConfig, b.noDefaultBrowser) } // oauthBrowser implements the Browser interface using the real OAuth2 login flow. type oauthBrowser struct{} // GetTokenFromBrowser opens a browser window for the user to log in and handles the OAuth2 flow to obtain a token. -func (b *oauthBrowser) GetTokenFromBrowser(ctx context.Context, conf *oauth2.Config, openBrowser bool) (*oauth2.Token, error) { +func (b *oauthBrowser) GetTokenFromBrowser(ctx context.Context, conf *oauth2.Config, noDefaultBrowser bool) (*oauth2.Token, error) { // Prepare the /authorize request with randomly generated state, offline access option, and audience aud := "https://api.hashicorp.cloud" opt := oauth2.SetAuthURLParam("audience", aud) @@ -57,14 +57,14 @@ func (b *oauthBrowser) GetTokenFromBrowser(ctx context.Context, conf *oauth2.Con defer signal.Stop(sigintCh) // Launch a request to HCP's authorization endpoint. - if openBrowser { + if noDefaultBrowser { + colorstring.Printf("[bold][yellow]Please open the following URL in your browser and follow the instructions to authenticate:\n%s\n", authzURL) + } else { colorstring.Printf("[bold][yellow]The default web browser has been opened at %s. Please continue the login in the web browser.\n", authzURL) if err := open.Start(authzURL); err != nil { return nil, fmt.Errorf("failed to open browser at URL %q: %w", authzURL, err) } - } else { - colorstring.Printf("[bold][yellow]Please open the following URL in your browser and follow the instructions to authenticate:\n%s\n", authzURL) } // Start callback server diff --git a/config/tokensource.go b/config/tokensource.go index 48e9dee6..c3b18e85 100644 --- a/config/tokensource.go +++ b/config/tokensource.go @@ -143,7 +143,7 @@ func (c *hcpConfig) getTokenSource() (oauth2.TokenSource, sourceType, string, er var loginTokenSource oauth2.TokenSource if !c.noBrowserLogin { - loginTokenSource = auth.NewBrowserLogin(&c.oauth2Config, !c.noDefaultBrowser) + loginTokenSource = auth.NewBrowserLogin(&c.oauth2Config, c.noDefaultBrowser) } return loginTokenSource, sourceTypeLogin, "", nil From c3e095d10cd5750ab52fed326a99c56ab4ab93d3 Mon Sep 17 00:00:00 2001 From: Sebastian Ohm Date: Wed, 28 Aug 2024 14:48:06 +0200 Subject: [PATCH 3/3] Add changelog --- .changelog/266.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .changelog/266.txt diff --git a/.changelog/266.txt b/.changelog/266.txt new file mode 100644 index 00000000..87742e49 --- /dev/null +++ b/.changelog/266.txt @@ -0,0 +1,3 @@ +```release-note:bug +Fixed default browser opening logic. +```