Add --reconnect flag (#43)

* Allow --reconnect and --random to work in unison

* Fix goreleaser
This commit is contained in:
DG
2021-08-09 22:59:45 -04:00
committed by GitHub
parent 61f5779346
commit c3c4bb44ba
3 changed files with 47 additions and 36 deletions

View File

@@ -18,7 +18,7 @@ jobs:
name: Set up Go name: Set up Go
uses: actions/setup-go@v2 uses: actions/setup-go@v2
with: with:
go-version: 1.15 go-version: 1.16
- -
name: Run GoReleaser name: Run GoReleaser
uses: goreleaser/goreleaser-action@v2 uses: goreleaser/goreleaser-action@v2
@@ -26,4 +26,4 @@ jobs:
version: latest version: latest
args: release --rm-dist args: release --rm-dist
env: env:
GITHUB_TOKEN: ${{ secrets.PERSONAL_GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@@ -72,12 +72,15 @@ If the country doesn't matter, a random server can be selected:
$ sudo vpngate connect --random $ sudo vpngate connect --random
``` ```
#### Reconnect
To continually attempt to reconnect (this can be combined with `--random`):
```console
$ sudo vpngate connect --reconnect
```
## Notes ## Notes
- I do not maintain any of the servers on vpngate.net (connect to these servers at your own discretion) - I do not maintain any of the servers on vpngate.net (connect to these servers at your own discretion)
- Many of the listed servers claim to have a logging policy of 2 weeks - Many of the listed servers claim to have a logging policy of 2 weeks
## Todo
- Allow for servers to be cycled periodically (--cycle)

View File

@@ -18,9 +18,11 @@ import (
) )
var flagRandom bool var flagRandom bool
var flagReconnect bool
func init() { func init() {
connectCmd.Flags().BoolVarP(&flagRandom, "random", "r", false, "connect to a random server") connectCmd.Flags().BoolVarP(&flagRandom, "random", "r", false, "connect to a random server")
connectCmd.Flags().BoolVarP(&flagReconnect, "reconnect", "t", false, "continually attempt to connect to the server")
rootCmd.AddCommand(connectCmd) rootCmd.AddCommand(connectCmd)
} }
@@ -51,11 +53,7 @@ var connectCmd = &cobra.Command{
Options: serverSelection, Options: serverSelection,
} }
if flagRandom { if !flagRandom {
// Select a random server
rand.Seed(time.Now().UnixNano())
serverSelected = (*vpnServers)[rand.Intn(len(*vpnServers))]
} else {
if len(args) > 0 { if len(args) > 0 {
selection = args[0] selection = args[0]
@@ -80,37 +78,47 @@ var connectCmd = &cobra.Command{
} }
} }
decodedConfig, err := base64.StdEncoding.DecodeString(serverSelected.OpenVpnConfigData) for {
if err != nil {
log.Fatal().Msgf(err.Error())
os.Exit(1)
}
tmpfile, err := ioutil.TempFile("", "vpngate-openvpn-config-") if flagRandom {
if err != nil { // Select a random server
log.Fatal().Msgf(err.Error()) rand.Seed(time.Now().UnixNano())
os.Exit(1) serverSelected = (*vpnServers)[rand.Intn(len(*vpnServers))]
} }
defer os.Remove(tmpfile.Name()) decodedConfig, err := base64.StdEncoding.DecodeString(serverSelected.OpenVpnConfigData)
if err != nil {
log.Fatal().Msgf(err.Error())
os.Exit(1)
}
if _, err := tmpfile.Write(decodedConfig); err != nil { tmpfile, err := ioutil.TempFile("", "vpngate-openvpn-config-")
log.Fatal().Msgf(err.Error()) if err != nil {
os.Exit(1) log.Fatal().Msgf(err.Error())
} os.Exit(1)
}
if err := tmpfile.Close(); err != nil { if _, err := tmpfile.Write(decodedConfig); err != nil {
log.Fatal().Msgf(err.Error()) log.Fatal().Msgf(err.Error())
os.Exit(1) os.Exit(1)
} }
log.Info().Msgf("Connecting to %s (%s) in %s", serverSelected.HostName, serverSelected.IPAddr, serverSelected.CountryLong) if err := tmpfile.Close(); err != nil {
log.Fatal().Msgf(err.Error())
os.Exit(1)
}
err = vpn.Connect(tmpfile.Name()) log.Info().Msgf("Connecting to %s (%s) in %s", serverSelected.HostName, serverSelected.IPAddr, serverSelected.CountryLong)
err = vpn.Connect(tmpfile.Name())
if err != nil && !flagReconnect {
log.Fatal().Msgf(err.Error())
os.Exit(1)
} else {
os.Remove(tmpfile.Name())
}
if err != nil {
log.Fatal().Msgf(err.Error())
os.Exit(1)
} }
}, },