summaryrefslogtreecommitdiff
path: root/cmd/eduvpn-cli
diff options
context:
space:
mode:
authorJeroen Wijenbergh <jeroen.wijenbergh@geant.org>2025-02-15 22:31:40 +0100
committerJeroen Wijenbergh <jeroen.wijenbergh@geant.org>2025-02-15 22:31:40 +0100
commitfd7dd1971892205061b618da50cb2742e79aa18a (patch)
treebe8f273fd582f96e6c0b723c279dc6404e06fe87 /cmd/eduvpn-cli
parentd05829c123e68b9c74b836be1f72392e670fa59f (diff)
CLI: Use a temp dir for state
Diffstat (limited to 'cmd/eduvpn-cli')
-rw-r--r--cmd/eduvpn-cli/main.go41
1 files changed, 27 insertions, 14 deletions
diff --git a/cmd/eduvpn-cli/main.go b/cmd/eduvpn-cli/main.go
index 263f55c..354682a 100644
--- a/cmd/eduvpn-cli/main.go
+++ b/cmd/eduvpn-cli/main.go
@@ -80,7 +80,7 @@ func sendProfile(state *client.Client, data interface{}) {
// If OAuth is started we open the browser with the Auth URL
// If we ask for a profile, we send the profile using command line input
// Note that this has an additional argument, the vpn state which was wrapped into this callback function below.
-func stateCallback(state *client.Client, _ client.FSMStateID, newState client.FSMStateID, data interface{}) {
+func stateCallback(state *client.Client, _ client.FSMStateID, newState client.FSMStateID, data interface{}, dir string) {
if newState == client.StateOAuthStarted {
openBrowser(data)
}
@@ -90,6 +90,8 @@ func stateCallback(state *client.Client, _ client.FSMStateID, newState client.FS
}
if newState == client.StateAskLocation {
+ // defer not run due to os.Exit
+ os.RemoveAll(dir)
fmt.Fprint(os.Stderr, "An invalid secure location is stored. This CLI doesn't support interactively choosing a location yet. Give a correct location with the -country-code flag")
os.Exit(1)
}
@@ -120,42 +122,48 @@ func getConfig(state *client.Client, url string, srvType srvtypes.Type, cc strin
}
// Get a config for a single server, Institute Access or Secure Internet.
-func printConfig(url string, cc string, srvType srvtypes.Type, debug bool) {
+func printConfig(url string, cc string, srvType srvtypes.Type, debug bool) error {
var c *client.Client
- c, err := client.New(
+ var err error
+ var dir string
+ dir, err = os.MkdirTemp("", "eduvpn-common")
+ if err != nil {
+ return err
+ }
+ defer os.RemoveAll(dir)
+ c, err = client.New(
"org.eduvpn.app.linux",
fmt.Sprintf("%s-cli", version.Version),
- "configs",
+ dir,
func(oldState client.FSMStateID, newState client.FSMStateID, data interface{}) bool {
- stateCallback(c, oldState, newState, data)
+ stateCallback(c, oldState, newState, data, dir)
return true
},
debug,
)
if err != nil {
- fmt.Printf("Register error: %v", err)
- return
+ return err
}
_ = c.Register()
ck := cookie.NewWithContext(context.Background())
_, err = c.DiscoOrganizations(ck, "")
if err != nil {
- panic(err)
+ return err
}
_, err = c.DiscoServers(ck, "")
if err != nil {
- panic(err)
+ return err
}
defer c.Deregister()
cfg, err := getConfig(c, url, srvType, cc)
if err != nil {
- fmt.Fprintf(os.Stderr, "failed getting a config: %v\n", err)
- return
+ return err
}
fmt.Printf("Obtained config:\n%s\n", cfg.VPNConfig)
+ return nil
}
// The main function
@@ -169,14 +177,19 @@ func main() {
flag.Parse()
// Connect to a VPN by getting an Institute Access config
+ var err error
switch {
case *cu != "":
- printConfig(*cu, "", srvtypes.TypeCustom, *debug)
+ err = printConfig(*cu, "", srvtypes.TypeCustom, *debug)
case *u != "":
- printConfig(*u, "", srvtypes.TypeInstituteAccess, *debug)
+ err = printConfig(*u, "", srvtypes.TypeInstituteAccess, *debug)
case *sec != "":
- printConfig(*sec, *cc, srvtypes.TypeSecureInternet, *debug)
+ err = printConfig(*sec, *cc, srvtypes.TypeSecureInternet, *debug)
default:
flag.PrintDefaults()
}
+
+ if err != nil {
+ fmt.Fprintf(os.Stderr, "failed to get a VPN config: %v\n", err)
+ }
}