From e3a677c22b842dcb566292c3d699106c54ddd16c Mon Sep 17 00:00:00 2001 From: Quentin McGaw Date: Mon, 13 Jul 2020 23:43:26 +0000 Subject: [PATCH] Add openvpnconfig command, for #179 --- cmd/gluetun/main.go | 2 ++ internal/cli/cli.go | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/cmd/gluetun/main.go b/cmd/gluetun/main.go index 29f5c0bc..697a1c45 100644 --- a/cmd/gluetun/main.go +++ b/cmd/gluetun/main.go @@ -42,6 +42,8 @@ func _main(background context.Context, args []string) int { err = cli.HealthCheck() case "clientkey": err = cli.ClientKey(args[2:]) + case "openvpnconfig": + err = cli.OpenvpnConfig() default: err = fmt.Errorf("command %q is unknown", args[1]) } diff --git a/internal/cli/cli.go b/internal/cli/cli.go index 823a8252..10c20f9a 100644 --- a/internal/cli/cli.go +++ b/internal/cli/cli.go @@ -8,6 +8,10 @@ import ( "net" "github.com/qdm12/golibs/files" + "github.com/qdm12/golibs/logging" + "github.com/qdm12/private-internet-access-docker/internal/params" + "github.com/qdm12/private-internet-access-docker/internal/provider" + "github.com/qdm12/private-internet-access-docker/internal/settings" ) func ClientKey(args []string) error { @@ -38,3 +42,32 @@ func HealthCheck() error { } return nil } + +func OpenvpnConfig() error { + logger, err := logging.NewLogger(logging.ConsoleEncoding, logging.InfoLevel, -1) + if err != nil { + return err + } + paramsReader := params.NewReader(logger) + allSettings, err := settings.GetAllSettings(paramsReader) + if err != nil { + return err + } + providerConf := provider.New(allSettings.OpenVPN.Provider.Name) + connections, err := providerConf.GetOpenVPNConnections(allSettings.OpenVPN.Provider.ServerSelection) + if err != nil { + return err + } + lines := providerConf.BuildConf( + connections, + allSettings.OpenVPN.Verbosity, + allSettings.System.UID, + allSettings.System.GID, + allSettings.OpenVPN.Root, + allSettings.OpenVPN.Cipher, + allSettings.OpenVPN.Auth, + allSettings.OpenVPN.Provider.ExtraConfigOptions, + ) + fmt.Println(strings.Join(lines, "\n")) + return nil +}