From 614b760c8aba17176cccd4acea5fbd84745cb46f Mon Sep 17 00:00:00 2001 From: wernerr Date: Tue, 26 Jul 2022 20:27:28 +0200 Subject: [PATCH] =?UTF-8?q?Add=20possibility=20for=20parameters=20before?= =?UTF-8?q?=20custom=20verb=20FIX=20for=20"=F0=9F=A4=97=20How=20to=20get?= =?UTF-8?q?=20path=20param=20before=20a=20custom=20verb=3F=20#1931"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- path.go | 2 +- path_test.go | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/path.go b/path.go index 2f70c7f742..21a3d6c4d0 100644 --- a/path.go +++ b/path.go @@ -58,7 +58,7 @@ var ( // list of chars for the parameter recognising parameterStartChars = []byte{wildcardParam, plusParam, paramStarterChar} // list of chars of delimiters and the starting parameter name char - parameterDelimiterChars = append([]byte{paramStarterChar}, routeDelimiter...) + parameterDelimiterChars = append([]byte{paramStarterChar, escapeChar}, routeDelimiter...) // list of chars to find the end of a parameter parameterEndChars = append([]byte{optionalParam}, parameterDelimiterChars...) ) diff --git a/path_test.go b/path_test.go index 246cd58f5d..9a237520dd 100644 --- a/path_test.go +++ b/path_test.go @@ -47,6 +47,17 @@ func Test_Path_parseRoute(t *testing.T) { }, params: nil, }, rp) + + rp = parseRoute("/v1/some/resource/:name\\:customVerb") + utils.AssertEqual(t, routeParser{ + segs: []*routeSegment{ + {Const: "/v1/some/resource/", Length: 18}, + {IsParam: true, ParamName: "name", ComparePart: ":customVerb", PartCount: 1}, + {Const: ":customVerb", Length: 11, IsLast: true}, + }, + params: []string{"name"}, + }, rp) + // heavy test with escaped charaters rp = parseRoute("/v1/some/resource/name\\\\:customVerb?\\?/:param/*") utils.AssertEqual(t, routeParser{ @@ -170,6 +181,10 @@ func Test_Path_matchParams(t *testing.T) { {url: "/v1/some/resource/name:customVerb", params: nil, match: true}, {url: "/v1/some/resource/name:test", params: nil, match: false}, }) + testCase("/v1/some/resource/:name\\:customVerb", []testparams{ + {url: "/v1/some/resource/test:customVerb", params: []string{"test"}, match: true}, + {url: "/v1/some/resource/test:test", params: nil, match: false}, + }) testCase("/v1/some/resource/name\\\\:customVerb?\\?/:param/*", []testparams{ {url: "/v1/some/resource/name:customVerb??/test/optionalWildCard/character", params: []string{"test", "optionalWildCard/character"}, match: true}, {url: "/v1/some/resource/name:customVerb??/test", params: []string{"test", ""}, match: true},