command/login: Fix browser launcher for WSL users
With the current implementation of terraform login, Windows Subsystem for Linux fails to open a browser due to lack of support for xdg-open. This commit reuses a fix from pkg/browser#8 which detects a WSL environment and uses cmd.exe to open the URL instead.
This commit is contained in:
parent
76e5b446ba
commit
12e090ce48
|
@ -2,6 +2,8 @@ package webbrowser
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/pkg/browser"
|
"github.com/pkg/browser"
|
||||||
|
"os/exec"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
// NewNativeLauncher creates and returns a Launcher that will attempt to interact
|
// NewNativeLauncher creates and returns a Launcher that will attempt to interact
|
||||||
|
@ -13,6 +15,18 @@ func NewNativeLauncher() Launcher {
|
||||||
|
|
||||||
type nativeLauncher struct{}
|
type nativeLauncher struct{}
|
||||||
|
|
||||||
|
func hasProgram(name string) bool {
|
||||||
|
_, err := exec.LookPath(name)
|
||||||
|
return err == nil
|
||||||
|
}
|
||||||
|
|
||||||
func (l nativeLauncher) OpenURL(url string) error {
|
func (l nativeLauncher) OpenURL(url string) error {
|
||||||
|
// Windows Subsystem for Linux (bash for Windows) doesn't have xdg-open available
|
||||||
|
// but you can execute cmd.exe from there; try to identify it
|
||||||
|
if !hasProgram("xdg-open") && hasProgram("cmd.exe") {
|
||||||
|
r := strings.NewReplacer("&", "^&")
|
||||||
|
exec.Command("cmd.exe", "/c", "start", r.Replace(url)).Run()
|
||||||
|
}
|
||||||
|
|
||||||
return browser.OpenURL(url)
|
return browser.OpenURL(url)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue