Explorar el Código

Merge pull request #318 from docker/chore-browser

Return an error if unable to open the browser
Djordje Lukic hace 5 años
padre
commit
14b2e54c06
Se han modificado 5 ficheros con 12 adiciones y 26 borrados
  1. 3 22
      azure/login/login.go
  2. 4 3
      azure/login/loginHelper.go
  3. 2 1
      azure/login/login_test.go
  4. 1 0
      go.mod
  5. 2 0
      go.sum

+ 3 - 22
azure/login/login.go

@@ -20,12 +20,9 @@ import (
 	"context"
 	"encoding/json"
 	"fmt"
-	"log"
 	"net/http"
 	"net/url"
-	"os/exec"
 	"path/filepath"
-	"runtime"
 	"strconv"
 	"time"
 
@@ -137,7 +134,9 @@ func (login AzureLoginService) Login(ctx context.Context, requestedTenantID stri
 	if redirectURL == "" {
 		return errors.Wrap(errdefs.ErrLoginFailed, "empty redirect URL")
 	}
-	login.apiHelper.openAzureLoginPage(redirectURL)
+	if err = login.apiHelper.openAzureLoginPage(redirectURL); err != nil {
+		return err
+	}
 
 	select {
 	case <-ctx.Done():
@@ -302,21 +301,3 @@ func (login AzureLoginService) refreshToken(currentRefreshToken string, tenantID
 
 	return toOAuthToken(token), nil
 }
-
-func openbrowser(url string) {
-	var err error
-
-	switch runtime.GOOS {
-	case "linux":
-		err = exec.Command("xdg-open", url).Start()
-	case "windows":
-		err = exec.Command("rundll32", "url.dll,FileProtocolHandler", url).Start()
-	case "darwin":
-		err = exec.Command("open", url).Start()
-	default:
-		err = fmt.Errorf("unsupported platform")
-	}
-	if err != nil {
-		log.Fatal(err)
-	}
-}

+ 4 - 3
azure/login/loginHelper.go

@@ -25,21 +25,22 @@ import (
 	"net/url"
 	"strings"
 
+	"github.com/pkg/browser"
 	"github.com/pkg/errors"
 )
 
 type apiHelper interface {
 	queryToken(data url.Values, tenantID string) (azureToken, error)
-	openAzureLoginPage(redirectURL string)
+	openAzureLoginPage(redirectURL string) error
 	queryAuthorizationAPI(authorizationURL string, authorizationHeader string) ([]byte, int, error)
 }
 
 type azureAPIHelper struct{}
 
-func (helper azureAPIHelper) openAzureLoginPage(redirectURL string) {
+func (helper azureAPIHelper) openAzureLoginPage(redirectURL string) error {
 	state := randomString("", 10)
 	authURL := fmt.Sprintf(authorizeFormat, clientID, redirectURL, state, scopes)
-	openbrowser(authURL)
+	return browser.OpenURL(authURL)
 }
 
 func (helper azureAPIHelper) queryAuthorizationAPI(authorizationURL string, authorizationHeader string) ([]byte, int, error) {

+ 2 - 1
azure/login/login_test.go

@@ -370,6 +370,7 @@ func (s *MockAzureHelper) queryAuthorizationAPI(authorizationURL string, authori
 	return args.Get(0).([]byte), args.Int(1), args.Error(2)
 }
 
-func (s *MockAzureHelper) openAzureLoginPage(redirectURL string) {
+func (s *MockAzureHelper) openAzureLoginPage(redirectURL string) error {
 	s.Called(redirectURL)
+	return nil
 }

+ 1 - 0
go.mod

@@ -39,6 +39,7 @@ require (
 	github.com/opencontainers/go-digest v1.0.0
 	github.com/opencontainers/image-spec v1.0.1 // indirect
 	github.com/opencontainers/runc v0.1.1 // indirect
+	github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4
 	github.com/pkg/errors v0.9.1
 	github.com/robpike/filter v0.0.0-20150108201509-2984852a2183
 	github.com/sirupsen/logrus v1.6.0

+ 2 - 0
go.sum

@@ -245,6 +245,8 @@ github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59P
 github.com/opencontainers/runtime-spec v0.1.2-0.20190507144316-5b71a03e2700 h1:eNUVfm/RFLIi1G7flU5/ZRTHvd4kcVuzfRnL6OFlzCI=
 github.com/opencontainers/runtime-spec v0.1.2-0.20190507144316-5b71a03e2700/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
 github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
+github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4 h1:49lOXmGaUpV9Fz3gd7TFZY106KVlPVa5jcYD1gaQf98=
+github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4/go.mod h1:4OwLy04Bl9Ef3GJJCoec+30X3LQs/0/m4HFRt/2LUSA=
 github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 github.com/pkg/errors v0.8.1-0.20171018195549-f15c970de5b7/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=