diff options
| author | Jeroen Wijenbergh <jeroen.wijenbergh@geant.org> | 2025-02-15 22:31:40 +0100 |
|---|---|---|
| committer | Jeroen Wijenbergh <jeroen.wijenbergh@geant.org> | 2025-02-15 22:31:40 +0100 |
| commit | fd7dd1971892205061b618da50cb2742e79aa18a (patch) | |
| tree | be8f273fd582f96e6c0b723c279dc6404e06fe87 | |
| parent | d05829c123e68b9c74b836be1f72392e670fa59f (diff) | |
CLI: Use a temp dir for state
| -rw-r--r-- | cmd/eduvpn-cli/main.go | 41 |
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) + } } |
