diff --git a/internal/urlreplacer/helpers.go b/internal/urlreplacer/helpers.go index e099a4c4..d148ab9c 100644 --- a/internal/urlreplacer/helpers.go +++ b/internal/urlreplacer/helpers.go @@ -15,7 +15,7 @@ func wildCardToRegexp(parsedPattern *url.URL) (*regexp.Regexp, int, error) { result.WriteString(`^(?P(http(s?):)?\/\/)?`) - host, port, err := urlx.SplitHostPort(parsedPattern) + host, _, err := urlx.SplitHostPort(parsedPattern) if err != nil { return nil, 0, fmt.Errorf("filed to build url glob: %w", err) } @@ -32,15 +32,7 @@ func wildCardToRegexp(parsedPattern *url.URL) (*regexp.Regexp, int, error) { } } - if len(port) > 0 { - // TODO: correctly handle default ports - if port == "80" || port == "443" { - fmt.Fprintf(&result, "(:%s)?", port) - } else { - fmt.Fprintf(&result, ":%s", port) - } - } - + result.WriteString(`(:\d+)?`) result.WriteString(`(?P[\/?].*)?$`) compiledRegexp, err := regexp.Compile(result.String()) diff --git a/internal/urlreplacer/helpers_internal_test.go b/internal/urlreplacer/helpers_internal_test.go index ea8dcea3..21a734f1 100644 --- a/internal/urlreplacer/helpers_internal_test.go +++ b/internal/urlreplacer/helpers_internal_test.go @@ -18,61 +18,61 @@ var testCases = []struct { { name: "localhost", url: "localhost", - expectedRegexp: `^(?P(http(s?):)?\/\/)?localhost(?P[\/?].*)?$`, + expectedRegexp: `^(?P(http(s?):)?\/\/)?localhost(:\d+)?(?P[\/?].*)?$`, expectedPattern: "${scheme}localhost${path}", }, { name: "localhost with port", url: "localhost:3000", - expectedRegexp: `^(?P(http(s?):)?\/\/)?localhost:3000(?P[\/?].*)?$`, + expectedRegexp: `^(?P(http(s?):)?\/\/)?localhost(:\d+)?(?P[\/?].*)?$`, expectedPattern: "${scheme}localhost:3000${path}", }, { name: "single star", url: "*", - expectedRegexp: `^(?P(http(s?):)?\/\/)?(?P.+)(?P[\/?].*)?$`, + expectedRegexp: `^(?P(http(s?):)?\/\/)?(?P.+)(:\d+)?(?P[\/?].*)?$`, expectedPattern: "${scheme}${part1}${path}", }, { name: "single star with port", url: "*:3001", - expectedRegexp: `^(?P(http(s?):)?\/\/)?(?P.+):3001(?P[\/?].*)?$`, + expectedRegexp: `^(?P(http(s?):)?\/\/)?(?P.+)(:\d+)?(?P[\/?].*)?$`, expectedPattern: "${scheme}${part1}:3001${path}", }, { name: "single star with url part", url: "demo.*.com", - expectedRegexp: `^(?P(http(s?):)?\/\/)?demo\.(?P.+)\.com(?P[\/?].*)?$`, + expectedRegexp: `^(?P(http(s?):)?\/\/)?demo\.(?P.+)\.com(:\d+)?(?P[\/?].*)?$`, expectedPattern: "${scheme}demo.${part1}.com${path}", }, { name: "single star with url part and port", url: "api.*.com:3001", - expectedRegexp: `^(?P(http(s?):)?\/\/)?api\.(?P.+)\.com:3001(?P[\/?].*)?$`, + expectedRegexp: `^(?P(http(s?):)?\/\/)?api\.(?P.+)\.com(:\d+)?(?P[\/?].*)?$`, expectedPattern: "${scheme}api.${part1}.com:3001${path}", }, { name: "multiple stars with url part", url: "*.host.*.com", - expectedRegexp: `^(?P(http(s?):)?\/\/)?(?P.+)\.host\.(?P.+)\.com(?P[\/?].*)?$`, + expectedRegexp: `^(?P(http(s?):)?\/\/)?(?P.+)\.host\.(?P.+)\.com(:\d+)?(?P[\/?].*)?$`, expectedPattern: "${scheme}${part1}.host.${part2}.com${path}", }, { name: "multiple stars with url part and port", url: "*.host.*.com:3001", - expectedRegexp: `^(?P(http(s?):)?\/\/)?(?P.+)\.host\.(?P.+)\.com:3001(?P[\/?].*)?$`, + expectedRegexp: `^(?P(http(s?):)?\/\/)?(?P.+)\.host\.(?P.+)\.com(:\d+)?(?P[\/?].*)?$`, expectedPattern: "${scheme}${part1}.host.${part2}.com:3001${path}", }, { name: "host with default http port", url: "*.api.com:80", - expectedRegexp: `^(?P(http(s?):)?\/\/)?(?P.+)\.api\.com(:80)?(?P[\/?].*)?$`, + expectedRegexp: `^(?P(http(s?):)?\/\/)?(?P.+)\.api\.com(:\d+)?(?P[\/?].*)?$`, expectedPattern: "${scheme}${part1}.api.com:80${path}", }, { name: "host with default https port", url: "*.api.com:443", - expectedRegexp: `^(?P(http(s?):)?\/\/)?(?P.+)\.api\.com(:443)?(?P[\/?].*)?$`, + expectedRegexp: `^(?P(http(s?):)?\/\/)?(?P.+)\.api\.com(:\d+)?(?P[\/?].*)?$`, expectedPattern: "${scheme}${part1}.api.com:443${path}", }, } diff --git a/internal/urlreplacer/replacer_test.go b/internal/urlreplacer/replacer_test.go index 143bd1a0..81db4033 100644 --- a/internal/urlreplacer/replacer_test.go +++ b/internal/urlreplacer/replacer_test.go @@ -293,12 +293,12 @@ func TestReplacerIsMatched(t *testing.T) { { name: "matched domain with different port", url: "premium.my.cc:2900", - expected: false, + expected: true, }, { name: "matched domain without port", url: "standard.my.cc", - expected: false, + expected: true, }, { name: "matched domain with same scheme and correct port", @@ -315,6 +315,11 @@ func TestReplacerIsMatched(t *testing.T) { url: "http//test.my.cc:3000", expected: true, }, + { + name: "not matched to different domain", + url: "http//localhost", + expected: false, + }, } for _, testsCase := range testsCases { t.Run(testsCase.name, func(t *testing.T) {