Francis Lavoie
4 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with
31 additions and
0 deletions
-
caddytest/integration/autohttps_test.go
-
modules/caddyhttp/server.go
|
|
@ -103,3 +103,23 @@ func TestAutoHTTPRedirectsInsertedBeforeUserDefinedCatchAll(t *testing.T) { |
|
|
|
tester.AssertGetResponse("http://foo.localhost:9080/", 200, "Foo") |
|
|
|
tester.AssertGetResponse("http://baz.localhost:9080/", 200, "Baz") |
|
|
|
} |
|
|
|
|
|
|
|
func TestAutoHTTPRedirectsInsertedBeforeUserDefinedCatchAllWithNoExplicitHTTPSite(t *testing.T) { |
|
|
|
tester := caddytest.NewTester(t) |
|
|
|
tester.InitServer(` |
|
|
|
{ |
|
|
|
http_port 9080 |
|
|
|
https_port 9443 |
|
|
|
local_certs |
|
|
|
} |
|
|
|
http://:9080 {
|
|
|
|
respond "Foo" |
|
|
|
} |
|
|
|
bar.localhost { |
|
|
|
respond "Bar" |
|
|
|
} |
|
|
|
`, "caddyfile") |
|
|
|
tester.AssertRedirect("http://bar.localhost:9080/", "https://bar.localhost/", http.StatusPermanentRedirect) |
|
|
|
tester.AssertGetResponse("http://foo.localhost:9080/", 200, "Foo") |
|
|
|
tester.AssertGetResponse("http://baz.localhost:9080/", 200, "Foo") |
|
|
|
} |
|
|
|
|
|
@ -379,7 +379,9 @@ func (s *Server) hasTLSClientAuth() bool { |
|
|
|
// that it is after any other host matcher but before any "catch-all"
|
|
|
|
// route without a host matcher.
|
|
|
|
func (s *Server) findLastRouteWithHostMatcher() int { |
|
|
|
foundHostMatcher := false |
|
|
|
lastIndex := len(s.Routes) |
|
|
|
|
|
|
|
for i, route := range s.Routes { |
|
|
|
// since we want to break out of an inner loop, use a closure
|
|
|
|
// to allow us to use 'return' when we found a host matcher
|
|
|
@ -388,6 +390,7 @@ func (s *Server) findLastRouteWithHostMatcher() int { |
|
|
|
for _, matcher := range sets { |
|
|
|
switch matcher.(type) { |
|
|
|
case *MatchHost: |
|
|
|
foundHostMatcher = true |
|
|
|
return true |
|
|
|
} |
|
|
|
} |
|
|
@ -401,6 +404,14 @@ func (s *Server) findLastRouteWithHostMatcher() int { |
|
|
|
lastIndex = i + 1 |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// If we didn't actually find a host matcher, return 0
|
|
|
|
// because that means every defined route was a "catch-all".
|
|
|
|
// See https://caddy.community/t/how-to-set-priority-in-caddyfile/13002/8
|
|
|
|
if !foundHostMatcher { |
|
|
|
return 0 |
|
|
|
} |
|
|
|
|
|
|
|
return lastIndex |
|
|
|
} |
|
|
|
|
|
|
|