@@ -14,6 +14,8 @@ import (
14
14
"net/url"
15
15
"os/exec"
16
16
"runtime"
17
+ "strings"
18
+ "syscall"
17
19
"time"
18
20
19
21
"github.com/spf13/viper"
@@ -115,7 +117,10 @@ func UserCredentialsLogin(p LoginParameters) (LoginResponse, error) {
115
117
u .RawQuery = q .Encode ()
116
118
117
119
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
+ }
119
124
120
125
ur , err := userAuthServer ()
121
126
if err != nil {
@@ -226,11 +231,34 @@ func generateState() (string, error) {
226
231
return base64 .URLEncoding .EncodeToString (b ), nil
227
232
}
228
233
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
+
229
253
func openBrowser (url string ) error {
230
254
var err error
231
255
switch runtime .GOOS {
232
256
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
+ }
234
262
case "windows" :
235
263
err = exec .Command ("rundll32" , "url.dll,FileProtocolHandler" , url ).Start ()
236
264
case "darwin" :
0 commit comments