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
uses: actions/setup-go@v2
with:
go-version: 1.15
go-version: 1.16
-
name: Run GoReleaser
uses: goreleaser/goreleaser-action@v2
@@ -26,4 +26,4 @@ jobs:
version: latest
args: release --rm-dist
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
```
#### Reconnect
To continually attempt to reconnect (this can be combined with `--random`):
```console
$ sudo vpngate connect --reconnect
```
## Notes
- 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
## Todo
- Allow for servers to be cycled periodically (--cycle)

View File

@@ -18,9 +18,11 @@ import (
)
var flagRandom bool
var flagReconnect bool
func init() {
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)
}
@@ -51,11 +53,7 @@ var connectCmd = &cobra.Command{
Options: serverSelection,
}
if flagRandom {
// Select a random server
rand.Seed(time.Now().UnixNano())
serverSelected = (*vpnServers)[rand.Intn(len(*vpnServers))]
} else {
if !flagRandom {
if len(args) > 0 {
selection = args[0]
@@ -80,37 +78,47 @@ var connectCmd = &cobra.Command{
}
}
decodedConfig, err := base64.StdEncoding.DecodeString(serverSelected.OpenVpnConfigData)
if err != nil {
log.Fatal().Msgf(err.Error())
os.Exit(1)
}
for {
tmpfile, err := ioutil.TempFile("", "vpngate-openvpn-config-")
if err != nil {
log.Fatal().Msgf(err.Error())
os.Exit(1)
}
if flagRandom {
// Select a random server
rand.Seed(time.Now().UnixNano())
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 {
log.Fatal().Msgf(err.Error())
os.Exit(1)
}
tmpfile, err := ioutil.TempFile("", "vpngate-openvpn-config-")
if err != nil {
log.Fatal().Msgf(err.Error())
os.Exit(1)
}
if err := tmpfile.Close(); err != nil {
log.Fatal().Msgf(err.Error())
os.Exit(1)
}
if _, err := tmpfile.Write(decodedConfig); err != nil {
log.Fatal().Msgf(err.Error())
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)
}
},