diff --git a/.github/workflows/goreleaser.yml b/.github/workflows/release.yml similarity index 100% rename from .github/workflows/goreleaser.yml rename to .github/workflows/release.yml diff --git a/.goreleaser.yaml b/.goreleaser.yaml index f1f138f..9e7d1c0 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -13,6 +13,7 @@ builds: goos: - linux - darwin + - windows goarch: - amd64 - arm diff --git a/README.md b/README.md index 0301a14..4954da6 100644 --- a/README.md +++ b/README.md @@ -14,22 +14,27 @@ curl ipinfo.io ## Requirements -- [openvpn](https://github.com/OpenVPN/openvpn) -- macOS or Linux +- OpenVPN <= 2.5 (configurations on vpngate.net do not seem work on OpenVPN 2.6+) +- macOS, Linux, or Windows ## Install -The simplest method of installation is using homebrew. You can also build from source. +You can install vpngate in a few different ways, and differs slightly depending on your OS. -### from homebrew +### Homebrew vpngate can be installed with [homebrew](https://brew.sh/) (ensure that xcode is installed before installing homebrew by running `xcode-select --install`). ```shell - brew install openvpn davegallant/public/vpngate ``` +## Windows + +On Windows, install OpenVPN 2.5.x from the [official website](https://openvpn.net/community-downloads/). + +You must run in the terminal (command prompt) as Administrator in order to be able to run the relevant OpenVPN commands. + ### from source Ensure that [go](https://golang.org/doc/install) is installed. diff --git a/pkg/vpn/client.go b/pkg/vpn/client.go index 5136c66..1953360 100644 --- a/pkg/vpn/client.go +++ b/pkg/vpn/client.go @@ -2,6 +2,7 @@ package vpn import ( "os" + "runtime" "github.com/davegallant/vpngate/pkg/exec" "github.com/juju/errors" @@ -28,6 +29,10 @@ func Connect(configPath string) error { } }() - _, err = exec.Run("openvpn", ".", "--verb", "4", "--log", tmpLogFile.Name(), "--config", configPath) + executable := "openvpn" + if runtime.GOOS == "windows" { + executable = "C:\\Program Files\\OpenVPN\\bin\\openvpn.exe" + } + _, err = exec.Run(executable, ".", "--verb", "4", "--log", tmpLogFile.Name(), "--config", configPath) return err }