summaryrefslogtreecommitdiff
path: root/cmd
diff options
context:
space:
mode:
Diffstat (limited to 'cmd')
-rw-r--r--cmd/cli/main.go37
1 files changed, 26 insertions, 11 deletions
diff --git a/cmd/cli/main.go b/cmd/cli/main.go
index 599cd20..c1294ed 100644
--- a/cmd/cli/main.go
+++ b/cmd/cli/main.go
@@ -3,13 +3,16 @@ package main
import (
"flag"
"fmt"
- "os/exec"
+ "net/url"
+ "os"
"strings"
"github.com/eduvpn/eduvpn-common/client"
"github.com/eduvpn/eduvpn-common/internal/oauth"
"github.com/eduvpn/eduvpn-common/internal/server"
"github.com/go-errors/errors"
+
+ "github.com/pkg/browser"
)
type ServerTypes int8
@@ -21,16 +24,28 @@ const (
)
// Open a browser with xdg-open.
-func openBrowser(url interface{}) {
- str, ok := url.(string)
+func openBrowser(data interface{}) {
+ str, ok := data.(string)
if !ok {
return
}
+ // double check URL scheme
+ u, err := url.Parse(str)
+ if err != nil {
+ fmt.Fprintln(os.Stderr, "failed parsing url", err)
+ return
+ }
+ // Double check the scheme
+ if u.Scheme != "https" {
+ fmt.Fprintln(os.Stderr, "got invalid scheme for URL:", u.String())
+ return
+ }
fmt.Printf("OAuth: Initialized with AuthURL %s\n", str)
- fmt.Println("OAuth: Opening browser with xdg-open...")
- if exec.Command("xdg-open", str).Start() != nil {
- // TODO(): Shouldn't this if statement be inverted?
- fmt.Println("OAuth: Browser opened with xdg-open...")
+ fmt.Println("Opening browser...")
+ err = browser.OpenURL(str)
+ if err != nil {
+ fmt.Fprintln(os.Stderr, "failed to open browser with error:", err)
+ fmt.Println("Please open your browser manually")
}
}
@@ -39,7 +54,7 @@ func sendProfile(state *client.Client, data interface{}) {
fmt.Printf("Multiple VPN profiles found. Please select a profile by entering e.g. 1")
sps, ok := data.(*server.ProfileInfo)
if !ok {
- fmt.Println("Invalid data type")
+ fmt.Fprintln(os.Stderr, "invalid data type")
return
}
@@ -54,7 +69,7 @@ func sendProfile(state *client.Client, data interface{}) {
var idx int
if _, err := fmt.Scanf("%d", &idx); err != nil || idx <= 0 ||
idx > len(sps.Info.ProfileList) {
- fmt.Println("invalid profile chosen, please retry")
+ fmt.Fprintln(os.Stderr, "invalid profile chosen, please retry")
sendProfile(state, data)
return
}
@@ -62,7 +77,7 @@ func sendProfile(state *client.Client, data interface{}) {
p := sps.Info.ProfileList[idx-1]
fmt.Println("Sending profile ID", p.ID)
if err := state.SetProfileID(p.ID); err != nil {
- fmt.Println("Failed setting profile with error", err)
+ fmt.Fprintln(os.Stderr, "failed setting profile with error", err)
}
}
@@ -131,7 +146,7 @@ func printConfig(url string, srvType ServerTypes) {
if err != nil {
err1 := err.(*errors.Error)
// Show the usage of tracebacks and causes
- fmt.Printf("Error getting config: %s\nCause:\n%s\nStack trace:\n%s\n\n'",
+ fmt.Fprintf(os.Stderr, "Error getting config: %s\nCause:\n%s\nStack trace:\n%s\n\n'",
err1.Error(), err1.Err, err1.ErrorStack())
return
}