fix validations

This commit is contained in:
Nikola Jokic 2025-05-16 11:12:52 +02:00
parent 25b32797ea
commit c42b4fb2d2
No known key found for this signature in database
GPG Key ID: E4104494F9B8DDF6
5 changed files with 37 additions and 57 deletions

View File

@ -21,19 +21,23 @@ func (pc *ProxyConfig) Validate() error {
} }
if pc.HTTP != nil { if pc.HTTP != nil {
_, err := url.Parse(pc.HTTP.URL) _, err := url.ParseRequestURI(pc.HTTP.URL)
if err != nil { if err != nil {
return fmt.Errorf("proxy http set with invalid url: %v", err) return fmt.Errorf("proxy http set with invalid url: %v", err)
} }
} }
if pc.HTTPS != nil { if pc.HTTPS != nil {
_, err := url.Parse(pc.HTTPS.URL) _, err := url.ParseRequestURI(pc.HTTPS.URL)
if err != nil { if err != nil {
return fmt.Errorf("proxy https set with invalid url: %v", err) return fmt.Errorf("proxy https set with invalid url: %v", err)
} }
} }
// TODO: maybe validate noproxy? for _, u := range pc.NoProxy {
if _, err := url.ParseRequestURI(u); err != nil {
return fmt.Errorf("proxy no_proxy set with invalid url: %v", err)
}
}
return nil return nil
} }

View File

@ -32,14 +32,18 @@ func (c *Config) Validate() error {
if c.ClientID == "" { if c.ClientID == "" {
return errors.New("client_id is not set") return errors.New("client_id is not set")
} }
if _, err := url.Parse(c.URL); err != nil { if _, err := url.ParseRequestURI(c.URL); err != nil {
return fmt.Errorf("failed to parse url: %v", err) return fmt.Errorf("failed to parse url: %v", err)
} }
if c.CertPath != "" { if c.CertPath == "" {
return errors.New("cert path must be provided") return errors.New("cert path must be provided")
} }
if _, err := os.Stat(c.CertPath); err != nil {
return fmt.Errorf("cert path %q does not exist: %v", c.CertPath, err)
}
if err := c.Proxy.Validate(); err != nil { if err := c.Proxy.Validate(); err != nil {
return fmt.Errorf("proxy validation failed: %v", err) return fmt.Errorf("proxy validation failed: %v", err)
} }

View File

@ -2,6 +2,7 @@ package azurekeyvault
import ( import (
"os" "os"
"path/filepath"
"testing" "testing"
"github.com/actions/actions-runner-controller/proxyconfig" "github.com/actions/actions-runner-controller/proxyconfig"
@ -98,16 +99,6 @@ func TestValidate_valid(t *testing.T) {
clientID := "clientID" clientID := "clientID"
url := "https://example.com" url := "https://example.com"
cp, err := os.CreateTemp("", "")
require.NoError(t, err)
err = cp.Close()
require.NoError(t, err)
certPath := cp.Name()
t.Cleanup(func() {
os.Remove(certPath)
})
proxy := &proxyconfig.ProxyConfig{ proxy := &proxyconfig.ProxyConfig{
HTTP: &proxyconfig.ProxyServerConfig{ HTTP: &proxyconfig.ProxyServerConfig{
URL: "http://httpconfig.com", URL: "http://httpconfig.com",
@ -124,15 +115,10 @@ func TestValidate_valid(t *testing.T) {
}, },
} }
certPath, err := filepath.Abs("testdata/server.crt")
require.NoError(t, err)
tt := map[string]*Config{ tt := map[string]*Config{
"with jwt": {
TenantID: tenantID,
ClientID: clientID,
URL: url,
CertPath: "",
CertPassword: "",
Proxy: proxy,
},
"with cert": { "with cert": {
TenantID: tenantID, TenantID: tenantID,
ClientID: clientID, ClientID: clientID,

20
vault/azurekeyvault/testdata/server.crt vendored Normal file
View File

@ -0,0 +1,20 @@
-----BEGIN CERTIFICATE-----
MIIDOjCCAiKgAwIBAgIUQr7R8yN5+2and6ucUOPF6oIbD48wDQYJKoZIhvcNAQEL
BQAwFzEVMBMGA1UEAwwMVGVzdCBSb290IENBMB4XDTI1MDIyODEyMDEzMFoXDTI2
MDcxMzEyMDEzMFowFDESMBAGA1UEAwwJbG9jYWxob3N0MIIBIjANBgkqhkiG9w0B
AQEFAAOCAQ8AMIIBCgKCAQEA4oL2hAPQlDVaNJru5fIstkpoVSuam0vpswC7ciRc
XQRjF3q8kjtIA7+jdySsKJqOLGnybDX3awvRyKMEjq11IfnZLjZc+FzTlA+x4z0h
MHb0GiBFXKNzrExGI9F0KEPtFxcMIqZ119LY2ReexxWkZBQYlgTepaevp71za4c2
n4Zy1+0iS5+uklZ4ANKMTBGlN76Qgt530VnpNiIeUbiUzY58Vx4q7kFcUv/oSz8p
rbXr+/GGpAjrOc6/JsezRE8YK2po60dvV80TJ2Jt6pduvF7OSQnq/v4mJl1xuXKl
Byo9HLbeu3BuVRWQs2/EwEzx5kX3Ugysl9Bm44K2yKe9/QIDAQABo4GAMH4wHwYD
VR0jBBgwFoAUfd/q0BY4fkVBV3X+HWzXH0toW08wCQYDVR0TBAIwADALBgNVHQ8E
BAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDwYDVR0RBAgwBocEfwAAATAdBgNV
HQ4EFgQUe0rTTfWjho3hgeLTnajTCpddo2MwDQYJKoZIhvcNAQELBQADggEBAIR2
5zkA7rPnddxCunsz8Jjq3wyhR/KiAFz+RGeFeiXDkF2fWr7QIQ9KbFbv8tpfXR7P
B75bY0sXwutHMB2sZDi92cH5sthNBfp19fI35cxcU4oTPxp4UZJKEiA3Qx8y73CX
NJu1009nPdOJNlIboDGAFdZ5SH6RCh+YcQZ68kjHPWBIpXxLbs9FN3QmpbAvtLh1
PoPaSy7IjKmxm1u+Lf6tyIn2IiB3MiynaB3OKvbkLCseM/5SZKMk6WKSDWopOCJr
xciPOc+yeLz5I2Omn0uViOIIciqjlgxncWAyNtDgvJcecwqB2cPiIhk6GY0QZ1uM
e7KoqGzWXvWLqJ13a9U=
-----END CERTIFICATE-----

View File

@ -1,34 +0,0 @@
package vault_test
import (
"os"
"testing"
"github.com/actions/actions-runner-controller/vault"
"github.com/actions/actions-runner-controller/vault/azurekeyvault"
"github.com/stretchr/testify/require"
)
func TestInitAll_AzureKeyVault(t *testing.T) {
os.Clearenv()
os.Setenv("LISTENER_AZURE_KEY_VAULT_TENANT_ID", "tenantID")
os.Setenv("LISTENER_AZURE_KEY_VAULT_CLIENT_ID", "clientID")
os.Setenv("LISTENER_AZURE_KEY_VAULT_URL", "https://example.com")
os.Setenv("LISTENER_AZURE_KEY_VAULT_CERT_PATH", "/path/to/cert")
os.Setenv("LISTENER_AZURE_KEY_VAULT_CERT_PASSWORD", "password")
os.Setenv("LISTENER_AZURE_KEY_VAULT_PROXY_HTTP_URL", "http://proxy.example.com")
os.Setenv("LISTENER_AZURE_KEY_VAULT_PROXY_HTTP_USERNAME", "username")
os.Setenv("LISTENER_AZURE_KEY_VAULT_PROXY_HTTP_PASSWORD", "password")
os.Setenv("LISTENER_AZURE_KEY_VAULT_PROXY_HTTPS_URL", "https://proxy.example.com")
os.Setenv("LISTENER_AZURE_KEY_VAULT_PROXY_HTTPS_USERNAME", "username")
os.Setenv("LISTENER_AZURE_KEY_VAULT_PROXY_HTTPS_PASSWORD", "password")
os.Setenv("LISTENER_AZURE_KEY_VAULT_PROXY_NO_PROXY", "temp.com")
vaults, err := vault.InitAll("LISTENER_")
require.NoError(t, err)
require.Len(t, vaults, 1)
require.Contains(t, vaults, vault.VaultTypeAzureKeyVault)
akv, ok := vaults[vault.VaultTypeAzureKeyVault].(*azurekeyvault.AzureKeyVault)
require.True(t, ok)
require.NotNil(t, akv)
}