Skip to content

Commit 630ae76

Browse files
committed
handle browser opening in WSL, show URL on error
1 parent df96efa commit 630ae76

File tree

1 file changed

+30
-2
lines changed

1 file changed

+30
-2
lines changed

internal/login/login.go

+30-2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ import (
1414
"net/url"
1515
"os/exec"
1616
"runtime"
17+
"strings"
18+
"syscall"
1719
"time"
1820

1921
"github.com/spf13/viper"
@@ -115,7 +117,10 @@ func UserCredentialsLogin(p LoginParameters) (LoginResponse, error) {
115117
u.RawQuery = q.Encode()
116118

117119
fmt.Println("Opening browser. Press Ctrl+C to cancel...")
118-
openBrowser(u.String())
120+
err = openBrowser(u.String())
121+
if err != nil {
122+
fmt.Printf("Unable to open default browser. You can manually navigate to this URL to complete the login: %s\n", u.String())
123+
}
119124

120125
ur, err := userAuthServer()
121126
if err != nil {
@@ -226,11 +231,34 @@ func generateState() (string, error) {
226231
return base64.URLEncoding.EncodeToString(b), nil
227232
}
228233

234+
// check for Windows Subsystem for Linux
235+
func isWsl() bool {
236+
// the common factor between WSL distros is the Microsoft-specific kernel version, so we check for that
237+
// SUSE, WSLv1: 4.4.0-19041-Microsoft
238+
// Ubuntu, WSLv2: 4.19.128-microsoft-standard
239+
var uname syscall.Utsname
240+
if err := syscall.Uname(&uname); err == nil {
241+
var kernel []byte
242+
for _, b := range uname.Release {
243+
if b == 0 {
244+
break
245+
}
246+
kernel = append(kernel, byte(b))
247+
}
248+
return strings.Contains(strings.ToLower(string(kernel)), "microsoft")
249+
}
250+
return false
251+
}
252+
229253
func openBrowser(url string) error {
230254
var err error
231255
switch runtime.GOOS {
232256
case "linux":
233-
err = exec.Command("xdg-open", url).Start()
257+
if isWsl() {
258+
err = exec.Command("rundll32.exe", "url.dll,FileProtocolHandler", url).Start()
259+
} else {
260+
err = exec.Command("xdg-open", url).Start()
261+
}
234262
case "windows":
235263
err = exec.Command("rundll32", "url.dll,FileProtocolHandler", url).Start()
236264
case "darwin":

0 commit comments

Comments
 (0)