From 22c8c074099bc795d62d14bacf228e2c677c0d81 Mon Sep 17 00:00:00 2001 From: cosban Date: Mon, 28 Oct 2024 12:31:13 -0600 Subject: [PATCH 1/3] add literal colon support for gin and echo --- pkg/codegen/utils.go | 2 ++ pkg/codegen/utils_test.go | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/pkg/codegen/utils.go b/pkg/codegen/utils.go index e82d5e3e3c..6c75b568de 100644 --- a/pkg/codegen/utils.go +++ b/pkg/codegen/utils.go @@ -543,6 +543,7 @@ func SwaggerUriToIrisUri(uri string) string { // {?param} // {?param*} func SwaggerUriToEchoUri(uri string) string { + uri = strings.ReplaceAll(uri, ":", "\\:") return pathParamRE.ReplaceAllString(uri, ":$1") } @@ -591,6 +592,7 @@ func SwaggerUriToChiUri(uri string) string { // {?param} // {?param*} func SwaggerUriToGinUri(uri string) string { + uri = strings.ReplaceAll(uri, ":", "\\:") return pathParamRE.ReplaceAllString(uri, ":$1") } diff --git a/pkg/codegen/utils_test.go b/pkg/codegen/utils_test.go index 28f9f3f3dd..86260955de 100644 --- a/pkg/codegen/utils_test.go +++ b/pkg/codegen/utils_test.go @@ -368,6 +368,9 @@ func TestSwaggerUriToEchoUri(t *testing.T) { assert.Equal(t, "/path/:arg/foo", SwaggerUriToEchoUri("/path/{;arg*}/foo")) assert.Equal(t, "/path/:arg/foo", SwaggerUriToEchoUri("/path/{?arg}/foo")) assert.Equal(t, "/path/:arg/foo", SwaggerUriToEchoUri("/path/{?arg*}/foo")) + + // Make sure literal colons are escaped + assert.Equal(t, "/path/:arg\\:foo", SwaggerUriToGinUri("/path/{arg}:foo")) } func TestSwaggerUriToGinUri(t *testing.T) { @@ -385,6 +388,9 @@ func TestSwaggerUriToGinUri(t *testing.T) { assert.Equal(t, "/path/:arg/foo", SwaggerUriToGinUri("/path/{;arg*}/foo")) assert.Equal(t, "/path/:arg/foo", SwaggerUriToGinUri("/path/{?arg}/foo")) assert.Equal(t, "/path/:arg/foo", SwaggerUriToGinUri("/path/{?arg*}/foo")) + + // Make sure literal colons are escaped + assert.Equal(t, "/path/:arg\\:foo", SwaggerUriToGinUri("/path/{arg}:foo")) } func TestSwaggerUriToGorillaUri(t *testing.T) { // TODO From b045ccbe6928d74f0d83c5190ede6b53cd53c9e9 Mon Sep 17 00:00:00 2001 From: cosban Date: Mon, 28 Oct 2024 12:43:57 -0600 Subject: [PATCH 2/3] backslashes should themselves be escaped too --- internal/test/issues/issue-312/issue.gen.go | 2 +- pkg/codegen/utils.go | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/internal/test/issues/issue-312/issue.gen.go b/internal/test/issues/issue-312/issue.gen.go index f0285c071f..787a65e8bc 100644 --- a/internal/test/issues/issue-312/issue.gen.go +++ b/internal/test/issues/issue-312/issue.gen.go @@ -488,7 +488,7 @@ func RegisterHandlersWithBaseURL(router EchoRouter, si ServerInterface, baseURL } router.GET(baseURL+"/pets/:petId", wrapper.GetPet) - router.POST(baseURL+"/pets:validate", wrapper.ValidatePets) + router.POST(baseURL+"/pets\\:validate", wrapper.ValidatePets) } diff --git a/pkg/codegen/utils.go b/pkg/codegen/utils.go index 6c75b568de..85c4a62333 100644 --- a/pkg/codegen/utils.go +++ b/pkg/codegen/utils.go @@ -543,7 +543,7 @@ func SwaggerUriToIrisUri(uri string) string { // {?param} // {?param*} func SwaggerUriToEchoUri(uri string) string { - uri = strings.ReplaceAll(uri, ":", "\\:") + uri = strings.ReplaceAll(uri, ":", "\\\\:") return pathParamRE.ReplaceAllString(uri, ":$1") } @@ -592,7 +592,7 @@ func SwaggerUriToChiUri(uri string) string { // {?param} // {?param*} func SwaggerUriToGinUri(uri string) string { - uri = strings.ReplaceAll(uri, ":", "\\:") + uri = strings.ReplaceAll(uri, ":", "\\\\:") return pathParamRE.ReplaceAllString(uri, ":$1") } From a58b695c2a26e63f173027f7e618db868fef51eb Mon Sep 17 00:00:00 2001 From: cosban Date: Mon, 28 Oct 2024 12:45:53 -0600 Subject: [PATCH 3/3] and of course, the tests need to be updated to account for the backslashed backslashes --- pkg/codegen/utils_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/codegen/utils_test.go b/pkg/codegen/utils_test.go index 86260955de..e4bd8e5587 100644 --- a/pkg/codegen/utils_test.go +++ b/pkg/codegen/utils_test.go @@ -370,7 +370,7 @@ func TestSwaggerUriToEchoUri(t *testing.T) { assert.Equal(t, "/path/:arg/foo", SwaggerUriToEchoUri("/path/{?arg*}/foo")) // Make sure literal colons are escaped - assert.Equal(t, "/path/:arg\\:foo", SwaggerUriToGinUri("/path/{arg}:foo")) + assert.Equal(t, "/path/:arg\\\\:foo", SwaggerUriToGinUri("/path/{arg}:foo")) } func TestSwaggerUriToGinUri(t *testing.T) { @@ -390,7 +390,7 @@ func TestSwaggerUriToGinUri(t *testing.T) { assert.Equal(t, "/path/:arg/foo", SwaggerUriToGinUri("/path/{?arg*}/foo")) // Make sure literal colons are escaped - assert.Equal(t, "/path/:arg\\:foo", SwaggerUriToGinUri("/path/{arg}:foo")) + assert.Equal(t, "/path/:arg\\\\:foo", SwaggerUriToGinUri("/path/{arg}:foo")) } func TestSwaggerUriToGorillaUri(t *testing.T) { // TODO