feature: adding env to allow for private repo usage

This commit is contained in:
Victor Fernandes 2023-11-16 18:26:31 +01:00
parent d6fea4f72c
commit f8e9196791
No known key found for this signature in database
GPG key ID: ACDB2332EA5A89A6
2 changed files with 21 additions and 16 deletions

View file

@ -13,13 +13,13 @@ import (
"github.com/yannh/kubeconform/pkg/cache" "github.com/yannh/kubeconform/pkg/cache"
) )
type httpGetter interface { type httpDoer interface {
Get(url string) (resp *http.Response, err error) Do(*http.Request) (resp *http.Response, err error)
} }
// SchemaRegistry is a file repository (local or remote) that contains JSON schemas for Kubernetes resources // SchemaRegistry is a file repository (local or remote) that contains JSON schemas for Kubernetes resources
type SchemaRegistry struct { type SchemaRegistry struct {
c httpGetter c httpDoer
schemaPathTemplate string schemaPathTemplate string
cache cache.Cache cache cache.Cache
strict bool strict bool
@ -72,8 +72,13 @@ func (r SchemaRegistry) DownloadSchema(resourceKind, resourceAPIVersion, k8sVers
return url, b.([]byte), nil return url, b.([]byte), nil
} }
} }
req, _ := http.NewRequest("GET", url, nil)
resp, err := r.c.Get(url) if token, exist := os.LookupEnv("GITHUB_TOKEN"); exist {
req.Header.Add("Authorization", fmt.Sprintf("token %s", token))
}
resp, err := r.c.Do(req)
if err != nil { if err != nil {
msg := fmt.Sprintf("failed downloading schema at %s: %s", url, err) msg := fmt.Sprintf("failed downloading schema at %s: %s", url, err)
if r.debug { if r.debug {

View file

@ -9,23 +9,23 @@ import (
"testing" "testing"
) )
type mockHTTPGetter struct { type mockHTTPDoer struct {
httpGet func(string) (*http.Response, error) httpDo func(*http.Request) (*http.Response, error)
} }
func newMockHTTPGetter(f func(string) (*http.Response, error)) *mockHTTPGetter { func newMockHTTPDoer(f func(*http.Request) (*http.Response, error)) *mockHTTPDoer {
return &mockHTTPGetter{ return &mockHTTPDoer{
httpGet: f, httpDo: f,
} }
} }
func (m mockHTTPGetter) Get(url string) (resp *http.Response, err error) { func (m mockHTTPDoer) Do(req *http.Request) (resp *http.Response, err error) {
return m.httpGet(url) return m.httpDo(req)
} }
func TestDownloadSchema(t *testing.T) { func TestDownloadSchema(t *testing.T) {
for _, testCase := range []struct { for _, testCase := range []struct {
name string name string
c httpGetter c httpDoer
schemaPathTemplate string schemaPathTemplate string
strict bool strict bool
resourceKind, resourceAPIVersion, k8sversion string resourceKind, resourceAPIVersion, k8sversion string
@ -34,7 +34,7 @@ func TestDownloadSchema(t *testing.T) {
}{ }{
{ {
"error when downloading", "error when downloading",
newMockHTTPGetter(func(url string) (resp *http.Response, err error) { newMockHTTPDoer(func(req *http.Request) (resp *http.Response, err error) {
return nil, fmt.Errorf("failed downloading from registry") return nil, fmt.Errorf("failed downloading from registry")
}), }),
"http://kubernetesjson.dev", "http://kubernetesjson.dev",
@ -47,7 +47,7 @@ func TestDownloadSchema(t *testing.T) {
}, },
{ {
"getting 404", "getting 404",
newMockHTTPGetter(func(url string) (resp *http.Response, err error) { newMockHTTPDoer(func(req *http.Request) (resp *http.Response, err error) {
return &http.Response{ return &http.Response{
StatusCode: http.StatusNotFound, StatusCode: http.StatusNotFound,
Body: io.NopCloser(strings.NewReader("http response mock body")), Body: io.NopCloser(strings.NewReader("http response mock body")),
@ -63,7 +63,7 @@ func TestDownloadSchema(t *testing.T) {
}, },
{ {
"getting 503", "getting 503",
newMockHTTPGetter(func(url string) (resp *http.Response, err error) { newMockHTTPDoer(func(req *http.Request) (resp *http.Response, err error) {
return &http.Response{ return &http.Response{
StatusCode: http.StatusServiceUnavailable, StatusCode: http.StatusServiceUnavailable,
Body: io.NopCloser(strings.NewReader("http response mock body")), Body: io.NopCloser(strings.NewReader("http response mock body")),
@ -79,7 +79,7 @@ func TestDownloadSchema(t *testing.T) {
}, },
{ {
"200", "200",
newMockHTTPGetter(func(url string) (resp *http.Response, err error) { newMockHTTPDoer(func(req *http.Request) (resp *http.Response, err error) {
return &http.Response{ return &http.Response{
StatusCode: http.StatusOK, StatusCode: http.StatusOK,
Body: io.NopCloser(strings.NewReader("http response mock body")), Body: io.NopCloser(strings.NewReader("http response mock body")),