diff --git a/README.md b/README.md index d2ba1ddc..dda25f6a 100644 --- a/README.md +++ b/README.md @@ -195,17 +195,20 @@ Want more testing? ▶ [see the Wiki](https://github.com/qdm12/private-internet- | --- | --- | --- | --- | | 🏁 `USER` | | | Your username | | 🏁 `PASSWORD` | | | Your password | - | 🏁 `CLIENT_KEY` | | | Your device client key content on a single line, **see below** | + | 🏁 `CLIENT_KEY` | | | Your device client key content, **see below** | | `REGION` | `Austria` | One of the [Cyberghost countries](https://github.com/qdm12/private-internet-access-docker/wiki/Cyberghost#regions) | VPN server country | | `CYBERGHOST_GROUP` | `Premium UDP Europe` | One of the [server groups](https://github.com/qdm12/private-internet-access-docker/wiki/Cyberghost#server-groups) | Server group | - To make `CLIENT_KEY`, run the following using your client.key file: + To specify your client key, you can either: - ```sh - docker run -it --rm -v /yourpath/client.key:/client.key:ro qmcgaw/private-internet-access clientkey - ``` + - Bind mount it at `/files/client.key`, for example with `-v /yourpath/client.key:/files/client.key:ro` + - Convert it to a single line value using: - And use the line produced as the environment variable `CLIENT_KEY` + ```sh + docker run -it --rm -v /yourpath/client.key:/files/client.key:ro qmcgaw/private-internet-access clientkey + ``` + + And use the line produced as the value for the environment variable `CLIENT_KEY`. - VyprVPN diff --git a/cmd/gluetun/main.go b/cmd/gluetun/main.go index 697a1c45..b81b9fc7 100644 --- a/cmd/gluetun/main.go +++ b/cmd/gluetun/main.go @@ -58,11 +58,6 @@ func _main(background context.Context, args []string) int { logger := createLogger() wg := &sync.WaitGroup{} fatalOnError := makeFatalOnError(logger, cancel, wg) - paramsReader := params.NewReader(logger) - fmt.Println(gluetunLogging.Splash( - paramsReader.GetVersion(), - paramsReader.GetVcsRef(), - paramsReader.GetBuildDate())) client := network.NewClient(15 * time.Second) // Create configurators @@ -76,6 +71,12 @@ func _main(background context.Context, args []string) int { shadowsocksConf := shadowsocks.NewConfigurator(fileManager, logger) streamMerger := command.NewStreamMerger() + paramsReader := params.NewReader(logger, fileManager) + fmt.Println(gluetunLogging.Splash( + paramsReader.GetVersion(), + paramsReader.GetVcsRef(), + paramsReader.GetBuildDate())) + printVersions(ctx, logger, map[string]func(ctx context.Context) (string, error){ "OpenVPN": ovpnConf.Version, "Unbound": dnsConf.Version, diff --git a/internal/cli/cli.go b/internal/cli/cli.go index 10c20f9a..9dfb7a09 100644 --- a/internal/cli/cli.go +++ b/internal/cli/cli.go @@ -16,7 +16,7 @@ import ( func ClientKey(args []string) error { flagSet := flag.NewFlagSet("clientkey", flag.ExitOnError) - filepath := flagSet.String("path", "/client.key", "file path to the client.key file") + filepath := flagSet.String("path", "/files/client.key", "file path to the client.key file") if err := flagSet.Parse(args); err != nil { return err } @@ -27,6 +27,7 @@ func ClientKey(args []string) error { } s := string(data) s = strings.ReplaceAll(s, "\n", "") + s = strings.ReplaceAll(s, "\r", "") s = strings.TrimPrefix(s, "-----BEGIN PRIVATE KEY-----") s = strings.TrimSuffix(s, "-----END PRIVATE KEY-----") fmt.Println(s) @@ -48,7 +49,7 @@ func OpenvpnConfig() error { if err != nil { return err } - paramsReader := params.NewReader(logger) + paramsReader := params.NewReader(logger, files.NewFileManager()) allSettings, err := settings.GetAllSettings(paramsReader) if err != nil { return err diff --git a/internal/params/cyberghost.go b/internal/params/cyberghost.go index d8f59c4b..dffdd70b 100644 --- a/internal/params/cyberghost.go +++ b/internal/params/cyberghost.go @@ -1,6 +1,8 @@ package params import ( + "strings" + libparams "github.com/qdm12/golibs/params" "github.com/qdm12/private-internet-access-docker/internal/constants" ) @@ -22,5 +24,18 @@ func (p *reader) GetCyberghostRegion() (region string, err error) { // GetCyberghostClientKey obtains the one line client key to use for openvpn from the // environment variable CLIENT_KEY func (p *reader) GetCyberghostClientKey() (clientKey string, err error) { - return p.envParams.GetEnv("CLIENT_KEY", libparams.Compulsory(), libparams.CaseSensitiveValue()) + clientKey, err = p.envParams.GetEnv("CLIENT_KEY", libparams.CaseSensitiveValue()) + if err != nil { + return "", err + } else if len(clientKey) > 0 { + return clientKey, nil + } + content, err := p.fileManager.ReadFile("/files/client.key") + if err != nil { + return "", err + } + s := string(content) + s = strings.ReplaceAll(s, "\n", "") + s = strings.ReplaceAll(s, "\r", "") + return s, nil } diff --git a/internal/params/params.go b/internal/params/params.go index 267d58e6..d0e8f053 100644 --- a/internal/params/params.go +++ b/internal/params/params.go @@ -5,6 +5,7 @@ import ( "os" "time" + "github.com/qdm12/golibs/files" "github.com/qdm12/golibs/logging" libparams "github.com/qdm12/golibs/params" "github.com/qdm12/golibs/verification" @@ -101,20 +102,22 @@ type Reader interface { } type reader struct { - envParams libparams.EnvParams - logger logging.Logger - verifier verification.Verifier - unsetEnv func(key string) error + envParams libparams.EnvParams + logger logging.Logger + verifier verification.Verifier + unsetEnv func(key string) error + fileManager files.FileManager } // Newreader returns a paramsReadeer object to read parameters from // environment variables -func NewReader(logger logging.Logger) Reader { +func NewReader(logger logging.Logger, fileManager files.FileManager) Reader { return &reader{ - envParams: libparams.NewEnvParams(), - logger: logger, - verifier: verification.NewVerifier(), - unsetEnv: os.Unsetenv, + envParams: libparams.NewEnvParams(), + logger: logger, + verifier: verification.NewVerifier(), + unsetEnv: os.Unsetenv, + fileManager: fileManager, } }