mirror of
https://github.com/qdm12/gluetun.git
synced 2026-05-06 20:10:11 +02:00
chore(devrun): support key and cert for OpenVPN credentials
This commit is contained in:
@@ -27,6 +27,8 @@ type providerCredentials struct {
|
|||||||
type openvpnCredentials struct {
|
type openvpnCredentials struct {
|
||||||
Username string
|
Username string
|
||||||
Password string
|
Password string
|
||||||
|
Key string
|
||||||
|
Cert string
|
||||||
}
|
}
|
||||||
|
|
||||||
type wireguardCredentials struct {
|
type wireguardCredentials struct {
|
||||||
@@ -76,10 +78,12 @@ func validateCredentials(providerNameToCredentials map[string]providerCredential
|
|||||||
|
|
||||||
func validateOpenvpnCredentials(provider string, creds *openvpnCredentials) error {
|
func validateOpenvpnCredentials(provider string, creds *openvpnCredentials) error {
|
||||||
switch {
|
switch {
|
||||||
case creds.Username == "":
|
case creds.Username == "" && creds.Password != "":
|
||||||
return fmt.Errorf("provider %q openvpn credentials are missing the username", provider)
|
return fmt.Errorf("provider %q openvpn credentials are missing the username", provider)
|
||||||
case creds.Password == "":
|
case creds.Password == "" && creds.Username != "":
|
||||||
return fmt.Errorf("provider %q openvpn credentials are missing the password", provider)
|
return fmt.Errorf("provider %q openvpn credentials are missing the password", provider)
|
||||||
|
case creds.Username == "" && creds.Password == "" && creds.Key == "" && creds.Cert == "":
|
||||||
|
return fmt.Errorf("provider %q openvpn credentials are missing the username and password", provider)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@@ -147,6 +151,8 @@ func buildOpenvpnEnv(creds *openvpnCredentials) []string {
|
|||||||
return []string{
|
return []string{
|
||||||
"OPENVPN_USER=" + creds.Username,
|
"OPENVPN_USER=" + creds.Username,
|
||||||
"OPENVPN_PASSWORD=" + creds.Password,
|
"OPENVPN_PASSWORD=" + creds.Password,
|
||||||
|
"OPENVPN_KEY=" + creds.Key,
|
||||||
|
"OPENVPN_CERT=" + creds.Cert,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -220,6 +226,11 @@ func formatCredentialForDump(provider, vpnType string,
|
|||||||
builder.WriteString("\n")
|
builder.WriteString("\n")
|
||||||
builder.WriteString("password: ")
|
builder.WriteString("password: ")
|
||||||
builder.WriteString(providerCredentials.OpenVPN.Password)
|
builder.WriteString(providerCredentials.OpenVPN.Password)
|
||||||
|
builder.WriteString("\nkey: ")
|
||||||
|
builder.WriteString(providerCredentials.OpenVPN.Key)
|
||||||
|
builder.WriteString("\ncert: ")
|
||||||
|
builder.WriteString(providerCredentials.OpenVPN.Cert)
|
||||||
|
builder.WriteString("\n")
|
||||||
case vpnTypeWireGuard:
|
case vpnTypeWireGuard:
|
||||||
if providerCredentials.WireGuard == nil {
|
if providerCredentials.WireGuard == nil {
|
||||||
return "", fmt.Errorf("no wireguard credentials found for provider %q", provider)
|
return "", fmt.Errorf("no wireguard credentials found for provider %q", provider)
|
||||||
|
|||||||
@@ -205,19 +205,31 @@ func promptAndAddCredential(
|
|||||||
) error {
|
) error {
|
||||||
switch vpnType {
|
switch vpnType {
|
||||||
case vpnTypeOpenVPN:
|
case vpnTypeOpenVPN:
|
||||||
username, err := readLine(ctx, "OpenVPN username: ", false)
|
username, err := readLine(ctx, "OpenVPN username: ", true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("reading username: %w", err)
|
return fmt.Errorf("reading username: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
password, err := readSecret(ctx, "OpenVPN password: ", false)
|
password, err := readSecret(ctx, "OpenVPN password: ", username == "")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("reading password: %w", err)
|
return fmt.Errorf("reading password: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
key, err := readSecret(ctx, "OpenVPN key: ", true)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("reading key: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
cert, err := readSecret(ctx, "OpenVPN cert: ", true)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("reading cert: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
openvpnCredentials := &openvpnCredentials{
|
openvpnCredentials := &openvpnCredentials{
|
||||||
Username: username,
|
Username: username,
|
||||||
Password: string(password),
|
Password: string(password),
|
||||||
|
Key: string(key),
|
||||||
|
Cert: string(cert),
|
||||||
}
|
}
|
||||||
err = validateOpenvpnCredentials(provider, openvpnCredentials)
|
err = validateOpenvpnCredentials(provider, openvpnCredentials)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
Reference in New Issue
Block a user