Cyberghost: read client key as file, see #179

This commit is contained in:
Quentin McGaw
2020-07-14 00:17:31 +00:00
parent e3a677c22b
commit 7e7312459d
5 changed files with 46 additions and 23 deletions

View File

@@ -195,17 +195,20 @@ Want more testing? ▶ [see the Wiki](https://github.com/qdm12/private-internet-
| --- | --- | --- | --- | | --- | --- | --- | --- |
| 🏁 `USER` | | | Your username | | 🏁 `USER` | | | Your username |
| 🏁 `PASSWORD` | | | Your password | | 🏁 `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 | | `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 | | `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 - Bind mount it at `/files/client.key`, for example with `-v /yourpath/client.key:/files/client.key:ro`
docker run -it --rm -v /yourpath/client.key:/client.key:ro qmcgaw/private-internet-access clientkey - 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 - VyprVPN

View File

@@ -58,11 +58,6 @@ func _main(background context.Context, args []string) int {
logger := createLogger() logger := createLogger()
wg := &sync.WaitGroup{} wg := &sync.WaitGroup{}
fatalOnError := makeFatalOnError(logger, cancel, wg) 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) client := network.NewClient(15 * time.Second)
// Create configurators // Create configurators
@@ -76,6 +71,12 @@ func _main(background context.Context, args []string) int {
shadowsocksConf := shadowsocks.NewConfigurator(fileManager, logger) shadowsocksConf := shadowsocks.NewConfigurator(fileManager, logger)
streamMerger := command.NewStreamMerger() 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){ printVersions(ctx, logger, map[string]func(ctx context.Context) (string, error){
"OpenVPN": ovpnConf.Version, "OpenVPN": ovpnConf.Version,
"Unbound": dnsConf.Version, "Unbound": dnsConf.Version,

View File

@@ -16,7 +16,7 @@ import (
func ClientKey(args []string) error { func ClientKey(args []string) error {
flagSet := flag.NewFlagSet("clientkey", flag.ExitOnError) 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 { if err := flagSet.Parse(args); err != nil {
return err return err
} }
@@ -27,6 +27,7 @@ func ClientKey(args []string) error {
} }
s := string(data) s := string(data)
s = strings.ReplaceAll(s, "\n", "") s = strings.ReplaceAll(s, "\n", "")
s = strings.ReplaceAll(s, "\r", "")
s = strings.TrimPrefix(s, "-----BEGIN PRIVATE KEY-----") s = strings.TrimPrefix(s, "-----BEGIN PRIVATE KEY-----")
s = strings.TrimSuffix(s, "-----END PRIVATE KEY-----") s = strings.TrimSuffix(s, "-----END PRIVATE KEY-----")
fmt.Println(s) fmt.Println(s)
@@ -48,7 +49,7 @@ func OpenvpnConfig() error {
if err != nil { if err != nil {
return err return err
} }
paramsReader := params.NewReader(logger) paramsReader := params.NewReader(logger, files.NewFileManager())
allSettings, err := settings.GetAllSettings(paramsReader) allSettings, err := settings.GetAllSettings(paramsReader)
if err != nil { if err != nil {
return err return err

View File

@@ -1,6 +1,8 @@
package params package params
import ( import (
"strings"
libparams "github.com/qdm12/golibs/params" libparams "github.com/qdm12/golibs/params"
"github.com/qdm12/private-internet-access-docker/internal/constants" "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 // GetCyberghostClientKey obtains the one line client key to use for openvpn from the
// environment variable CLIENT_KEY // environment variable CLIENT_KEY
func (p *reader) GetCyberghostClientKey() (clientKey string, err error) { 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
} }

View File

@@ -5,6 +5,7 @@ import (
"os" "os"
"time" "time"
"github.com/qdm12/golibs/files"
"github.com/qdm12/golibs/logging" "github.com/qdm12/golibs/logging"
libparams "github.com/qdm12/golibs/params" libparams "github.com/qdm12/golibs/params"
"github.com/qdm12/golibs/verification" "github.com/qdm12/golibs/verification"
@@ -101,20 +102,22 @@ type Reader interface {
} }
type reader struct { type reader struct {
envParams libparams.EnvParams envParams libparams.EnvParams
logger logging.Logger logger logging.Logger
verifier verification.Verifier verifier verification.Verifier
unsetEnv func(key string) error unsetEnv func(key string) error
fileManager files.FileManager
} }
// Newreader returns a paramsReadeer object to read parameters from // Newreader returns a paramsReadeer object to read parameters from
// environment variables // environment variables
func NewReader(logger logging.Logger) Reader { func NewReader(logger logging.Logger, fileManager files.FileManager) Reader {
return &reader{ return &reader{
envParams: libparams.NewEnvParams(), envParams: libparams.NewEnvParams(),
logger: logger, logger: logger,
verifier: verification.NewVerifier(), verifier: verification.NewVerifier(),
unsetEnv: os.Unsetenv, unsetEnv: os.Unsetenv,
fileManager: fileManager,
} }
} }