48 lines
1.8 KiB
Go
48 lines
1.8 KiB
Go
package pia
|
|
|
|
import (
|
|
"context"
|
|
"net"
|
|
|
|
"github.com/qdm12/golibs/crypto/random"
|
|
"github.com/qdm12/golibs/files"
|
|
"github.com/qdm12/golibs/logging"
|
|
"github.com/qdm12/golibs/network"
|
|
"github.com/qdm12/golibs/verification"
|
|
"github.com/qdm12/private-internet-access-docker/internal/firewall"
|
|
"github.com/qdm12/private-internet-access-docker/internal/models"
|
|
)
|
|
|
|
// Configurator contains methods to download, read and modify the openvpn configuration to connect as a client
|
|
type Configurator interface {
|
|
GetOpenVPNConnections(region models.PIARegion, protocol models.NetworkProtocol,
|
|
encryption models.PIAEncryption, targetIP net.IP) (connections []models.OpenVPNConnection, err error)
|
|
BuildConf(connections []models.OpenVPNConnection, encryption models.PIAEncryption, verbosity, uid, gid int, root bool, cipher, auth string) (err error)
|
|
GetPortForward() (port uint16, err error)
|
|
WritePortForward(filepath models.Filepath, port uint16, uid, gid int) (err error)
|
|
ClearPortForward(filepath models.Filepath, uid, gid int) (err error)
|
|
AllowPortForwardFirewall(ctx context.Context, device models.VPNDevice, port uint16) (err error)
|
|
}
|
|
|
|
type configurator struct {
|
|
client network.Client
|
|
fileManager files.FileManager
|
|
firewall firewall.Configurator
|
|
logger logging.Logger
|
|
random random.Random
|
|
verifyPort func(port string) error
|
|
lookupIP func(host string) ([]net.IP, error)
|
|
}
|
|
|
|
// NewConfigurator returns a new Configurator object
|
|
func NewConfigurator(client network.Client, fileManager files.FileManager, firewall firewall.Configurator, logger logging.Logger) Configurator {
|
|
return &configurator{
|
|
client: client,
|
|
fileManager: fileManager,
|
|
firewall: firewall,
|
|
logger: logger.WithPrefix("PIA configurator: "),
|
|
random: random.NewRandom(),
|
|
verifyPort: verification.NewVerifier().VerifyPort,
|
|
lookupIP: net.LookupIP}
|
|
}
|