Case insensitive host rule
This commit is contained in:
parent
22ee8700ca
commit
aa26927d61
4 changed files with 45 additions and 5 deletions
3
Gopkg.lock
generated
3
Gopkg.lock
generated
|
@ -291,7 +291,7 @@
|
||||||
branch = "master"
|
branch = "master"
|
||||||
name = "github.com/containous/mux"
|
name = "github.com/containous/mux"
|
||||||
packages = ["."]
|
packages = ["."]
|
||||||
revision = "06ccd3e75091eb659b1d720cda0e16bc7057954c"
|
revision = "c33f32e268983f989290677351b871b65da75ba5"
|
||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
name = "github.com/containous/staert"
|
name = "github.com/containous/staert"
|
||||||
|
@ -819,6 +819,7 @@
|
||||||
revision = "9b66602d496a139e4722bdde32f0f1ac1c12d4a8"
|
revision = "9b66602d496a139e4722bdde32f0f1ac1c12d4a8"
|
||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
|
branch = "master"
|
||||||
name = "github.com/jjcollinge/servicefabric"
|
name = "github.com/jjcollinge/servicefabric"
|
||||||
packages = ["."]
|
packages = ["."]
|
||||||
revision = "8eebe170fa1ba25d3dfb928b3f86a7313b13b9fe"
|
revision = "8eebe170fa1ba25d3dfb928b3f86a7313b13b9fe"
|
||||||
|
|
|
@ -53,10 +53,10 @@ func (r *Rules) host(hosts ...string) *mux.Route {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *Rules) hostRegexp(hosts ...string) *mux.Route {
|
func (r *Rules) hostRegexp(hostPatterns ...string) *mux.Route {
|
||||||
router := r.Route.Route.Subrouter()
|
router := r.Route.Route.Subrouter()
|
||||||
for _, host := range hosts {
|
for _, hostPattern := range hostPatterns {
|
||||||
router.Host(strings.ToLower(host))
|
router.Host(hostPattern)
|
||||||
}
|
}
|
||||||
return r.Route.Route
|
return r.Route.Route
|
||||||
}
|
}
|
||||||
|
|
|
@ -195,6 +195,39 @@ func TestHostRegexp(t *testing.T) {
|
||||||
"http://barcom": false,
|
"http://barcom": false,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
desc: "regex insensitive",
|
||||||
|
hostExp: "{dummy:[A-Za-z-]+\\.bar\\.com}",
|
||||||
|
urls: map[string]bool{
|
||||||
|
"http://FOO.bar.com": true,
|
||||||
|
"http://foo.bar.com": true,
|
||||||
|
"http://fooubar.com": false,
|
||||||
|
"http://barucom": false,
|
||||||
|
"http://barcom": false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
desc: "insensitive host",
|
||||||
|
hostExp: "{dummy:[a-z-]+\\.bar\\.com}",
|
||||||
|
urls: map[string]bool{
|
||||||
|
"http://FOO.bar.com": true,
|
||||||
|
"http://foo.bar.com": true,
|
||||||
|
"http://fooubar.com": false,
|
||||||
|
"http://barucom": false,
|
||||||
|
"http://barcom": false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
desc: "insensitive host simple",
|
||||||
|
hostExp: "foo.bar.com",
|
||||||
|
urls: map[string]bool{
|
||||||
|
"http://FOO.bar.com": true,
|
||||||
|
"http://foo.bar.com": true,
|
||||||
|
"http://fooubar.com": false,
|
||||||
|
"http://barucom": false,
|
||||||
|
"http://barcom": false,
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, test := range testCases {
|
for _, test := range testCases {
|
||||||
|
@ -212,7 +245,7 @@ func TestHostRegexp(t *testing.T) {
|
||||||
|
|
||||||
for testURL, match := range test.urls {
|
for testURL, match := range test.urls {
|
||||||
req := testhelpers.MustNewRequest(http.MethodGet, testURL, nil)
|
req := testhelpers.MustNewRequest(http.MethodGet, testURL, nil)
|
||||||
assert.Equal(t, match, rt.Match(req, &mux.RouteMatch{}))
|
assert.Equal(t, match, rt.Match(req, &mux.RouteMatch{}), testURL)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
6
vendor/github.com/containous/mux/regexp.go
generated
vendored
6
vendor/github.com/containous/mux/regexp.go
generated
vendored
|
@ -53,6 +53,12 @@ func newRouteRegexp(tpl string, matchHost, matchPrefix, matchQuery, strictSlash,
|
||||||
varsN := make([]string, len(idxs)/2)
|
varsN := make([]string, len(idxs)/2)
|
||||||
varsR := make([]*regexp.Regexp, len(idxs)/2)
|
varsR := make([]*regexp.Regexp, len(idxs)/2)
|
||||||
pattern := bytes.NewBufferString("")
|
pattern := bytes.NewBufferString("")
|
||||||
|
|
||||||
|
// Host matching is case insensitive
|
||||||
|
if matchHost {
|
||||||
|
fmt.Fprint(pattern, "(?i)")
|
||||||
|
}
|
||||||
|
|
||||||
pattern.WriteByte('^')
|
pattern.WriteByte('^')
|
||||||
reverse := bytes.NewBufferString("")
|
reverse := bytes.NewBufferString("")
|
||||||
var end int
|
var end int
|
||||||
|
|
Loading…
Reference in a new issue