diff --git a/pkg/genericapiserver/server/filters/cors.go b/pkg/genericapiserver/server/filters/cors.go index 4d6ee35820..2c6e66ed6b 100644 --- a/pkg/genericapiserver/server/filters/cors.go +++ b/pkg/genericapiserver/server/filters/cors.go @@ -22,8 +22,6 @@ import ( "strings" "github.com/golang/glog" - - "k8s.io/kubernetes/pkg/util" ) // TODO: use restful.CrossOriginResourceSharing @@ -79,9 +77,22 @@ func WithCORS(handler http.Handler, allowedOriginPatterns []string, allowedMetho } func allowedOriginRegexps(allowedOrigins []string) []*regexp.Regexp { - res, err := util.CompileRegexps(allowedOrigins) + res, err := compileRegexps(allowedOrigins) if err != nil { glog.Fatalf("Invalid CORS allowed origin, --cors-allowed-origins flag was set to %v - %v", strings.Join(allowedOrigins, ","), err) } return res } + +// Takes a list of strings and compiles them into a list of regular expressions +func compileRegexps(regexpStrings []string) ([]*regexp.Regexp, error) { + regexps := []*regexp.Regexp{} + for _, regexpStr := range regexpStrings { + r, err := regexp.Compile(regexpStr) + if err != nil { + return []*regexp.Regexp{}, err + } + regexps = append(regexps, r) + } + return regexps, nil +} diff --git a/pkg/genericapiserver/server/filters/cors_test.go b/pkg/genericapiserver/server/filters/cors_test.go index bbd0b75a0e..6e8b46236c 100644 --- a/pkg/genericapiserver/server/filters/cors_test.go +++ b/pkg/genericapiserver/server/filters/cors_test.go @@ -156,3 +156,28 @@ func TestCORSAllowedMethods(t *testing.T) { } } + +func TestCompileRegex(t *testing.T) { + uncompiledRegexes := []string{"endsWithMe$", "^startingWithMe"} + regexes, err := compileRegexps(uncompiledRegexes) + + if err != nil { + t.Errorf("Failed to compile legal regexes: '%v': %v", uncompiledRegexes, err) + } + if len(regexes) != len(uncompiledRegexes) { + t.Errorf("Wrong number of regexes returned: '%v': %v", uncompiledRegexes, regexes) + } + + if !regexes[0].MatchString("Something that endsWithMe") { + t.Errorf("Wrong regex returned: '%v': %v", uncompiledRegexes[0], regexes[0]) + } + if regexes[0].MatchString("Something that doesn't endsWithMe.") { + t.Errorf("Wrong regex returned: '%v': %v", uncompiledRegexes[0], regexes[0]) + } + if !regexes[1].MatchString("startingWithMe is very important") { + t.Errorf("Wrong regex returned: '%v': %v", uncompiledRegexes[1], regexes[1]) + } + if regexes[1].MatchString("not startingWithMe should fail") { + t.Errorf("Wrong regex returned: '%v': %v", uncompiledRegexes[1], regexes[1]) + } +} diff --git a/pkg/util/util_test.go b/pkg/util/util_test.go index 3232e8c7f5..5caddbd378 100644 --- a/pkg/util/util_test.go +++ b/pkg/util/util_test.go @@ -30,31 +30,6 @@ func TestStringDiff(t *testing.T) { } } -func TestCompileRegex(t *testing.T) { - uncompiledRegexes := []string{"endsWithMe$", "^startingWithMe"} - regexes, err := CompileRegexps(uncompiledRegexes) - - if err != nil { - t.Errorf("Failed to compile legal regexes: '%v': %v", uncompiledRegexes, err) - } - if len(regexes) != len(uncompiledRegexes) { - t.Errorf("Wrong number of regexes returned: '%v': %v", uncompiledRegexes, regexes) - } - - if !regexes[0].MatchString("Something that endsWithMe") { - t.Errorf("Wrong regex returned: '%v': %v", uncompiledRegexes[0], regexes[0]) - } - if regexes[0].MatchString("Something that doesn't endsWithMe.") { - t.Errorf("Wrong regex returned: '%v': %v", uncompiledRegexes[0], regexes[0]) - } - if !regexes[1].MatchString("startingWithMe is very important") { - t.Errorf("Wrong regex returned: '%v': %v", uncompiledRegexes[1], regexes[1]) - } - if regexes[1].MatchString("not startingWithMe should fail") { - t.Errorf("Wrong regex returned: '%v': %v", uncompiledRegexes[1], regexes[1]) - } -} - func TestAllPtrFieldsNil(t *testing.T) { testCases := []struct { obj interface{}