Maint: create OpenVPN runner in VPN run loop

This commit is contained in:
Quentin McGaw (desktop)
2021-08-19 14:45:57 +00:00
parent 3d8e61900b
commit 9218c7ef19
7 changed files with 48 additions and 26 deletions

View File

@@ -11,6 +11,8 @@ import (
"github.com/qdm12/gluetun/internal/openvpn"
"github.com/qdm12/gluetun/internal/openvpn/custom"
"github.com/qdm12/gluetun/internal/provider"
"github.com/qdm12/golibs/command"
"github.com/qdm12/golibs/logging"
)
var (
@@ -24,8 +26,9 @@ var (
// It returns a serverName for port forwarding (PIA) and an error if it fails.
func setupOpenVPN(ctx context.Context, fw firewall.VPNConnectionSetter,
openvpnConf openvpn.Interface, providerConf provider.Provider,
openVPNSettings configuration.OpenVPN, providerSettings configuration.Provider) (
serverName string, err error) {
openVPNSettings configuration.OpenVPN, providerSettings configuration.Provider,
starter command.Starter, logger logging.Logger) (
runner vpnRunner, serverName string, err error) {
var connection models.Connection
var lines []string
if openVPNSettings.Config == "" {
@@ -37,23 +40,25 @@ func setupOpenVPN(ctx context.Context, fw firewall.VPNConnectionSetter,
lines, connection, err = custom.BuildConfig(openVPNSettings)
}
if err != nil {
return "", fmt.Errorf("%w: %s", errBuildConfig, err)
return nil, "", fmt.Errorf("%w: %s", errBuildConfig, err)
}
if err := openvpnConf.WriteConfig(lines); err != nil {
return "", fmt.Errorf("%w: %s", errWriteConfig, err)
return nil, "", fmt.Errorf("%w: %s", errWriteConfig, err)
}
if openVPNSettings.User != "" {
err := openvpnConf.WriteAuthFile(openVPNSettings.User, openVPNSettings.Password)
if err != nil {
return "", fmt.Errorf("%w: %s", errWriteAuth, err)
return nil, "", fmt.Errorf("%w: %s", errWriteAuth, err)
}
}
if err := fw.SetVPNConnection(ctx, connection); err != nil {
return "", fmt.Errorf("%w: %s", errFirewall, err)
return nil, "", fmt.Errorf("%w: %s", errFirewall, err)
}
return connection.Hostname, nil
runner = openvpn.NewRunner(openVPNSettings, starter, logger)
return runner, connection.Hostname, nil
}