Skip to content

Commit 44d5104

Browse files
committed
chore(devrun): support key and cert for OpenVPN credentials
1 parent 28ac8b8 commit 44d5104

2 files changed

Lines changed: 27 additions & 4 deletions

File tree

devrun/internal/credentials.go

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ type providerCredentials struct {
2727
type openvpnCredentials struct {
2828
Username string
2929
Password string
30+
Key string
31+
Cert string
3032
}
3133

3234
type wireguardCredentials struct {
@@ -76,10 +78,12 @@ func validateCredentials(providerNameToCredentials map[string]providerCredential
7678

7779
func validateOpenvpnCredentials(provider string, creds *openvpnCredentials) error {
7880
switch {
79-
case creds.Username == "":
81+
case creds.Username == "" && creds.Password != "":
8082
return fmt.Errorf("provider %q openvpn credentials are missing the username", provider)
81-
case creds.Password == "":
83+
case creds.Password == "" && creds.Username != "":
8284
return fmt.Errorf("provider %q openvpn credentials are missing the password", provider)
85+
case creds.Username == "" && creds.Password == "" && creds.Key == "" && creds.Cert == "":
86+
return fmt.Errorf("provider %q openvpn credentials are missing the username and password", provider)
8387
}
8488
return nil
8589
}
@@ -147,6 +151,8 @@ func buildOpenvpnEnv(creds *openvpnCredentials) []string {
147151
return []string{
148152
"OPENVPN_USER=" + creds.Username,
149153
"OPENVPN_PASSWORD=" + creds.Password,
154+
"OPENVPN_KEY=" + creds.Key,
155+
"OPENVPN_CERT=" + creds.Cert,
150156
}
151157
}
152158

@@ -220,6 +226,11 @@ func formatCredentialForDump(provider, vpnType string,
220226
builder.WriteString("\n")
221227
builder.WriteString("password: ")
222228
builder.WriteString(providerCredentials.OpenVPN.Password)
229+
builder.WriteString("\nkey: ")
230+
builder.WriteString(providerCredentials.OpenVPN.Key)
231+
builder.WriteString("\ncert: ")
232+
builder.WriteString(providerCredentials.OpenVPN.Cert)
233+
builder.WriteString("\n")
223234
case vpnTypeWireGuard:
224235
if providerCredentials.WireGuard == nil {
225236
return "", fmt.Errorf("no wireguard credentials found for provider %q", provider)

devrun/internal/encrypt.go

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -205,19 +205,31 @@ func promptAndAddCredential(
205205
) error {
206206
switch vpnType {
207207
case vpnTypeOpenVPN:
208-
username, err := readLine(ctx, "OpenVPN username: ", false)
208+
username, err := readLine(ctx, "OpenVPN username: ", true)
209209
if err != nil {
210210
return fmt.Errorf("reading username: %w", err)
211211
}
212212

213-
password, err := readSecret(ctx, "OpenVPN password: ", false)
213+
password, err := readSecret(ctx, "OpenVPN password: ", username == "")
214214
if err != nil {
215215
return fmt.Errorf("reading password: %w", err)
216216
}
217217

218+
key, err := readSecret(ctx, "OpenVPN key: ", true)
219+
if err != nil {
220+
return fmt.Errorf("reading key: %w", err)
221+
}
222+
223+
cert, err := readSecret(ctx, "OpenVPN cert: ", true)
224+
if err != nil {
225+
return fmt.Errorf("reading cert: %w", err)
226+
}
227+
218228
openvpnCredentials := &openvpnCredentials{
219229
Username: username,
220230
Password: string(password),
231+
Key: string(key),
232+
Cert: string(cert),
221233
}
222234
err = validateOpenvpnCredentials(provider, openvpnCredentials)
223235
if err != nil {

0 commit comments

Comments
 (0)