From 26d76501fb3c0cf94bd0124f45e4a70f1390f307 Mon Sep 17 00:00:00 2001 From: Caleb Doxsey Date: Thu, 16 Feb 2023 11:24:47 -0700 Subject: [PATCH] backport-3980-to-0-21-0 (#3986) --- config/envoyconfig/listeners_test.go | 2 +- config/envoyconfig/lua_test.go | 4 ++-- config/envoyconfig/luascripts/rewrite-headers.lua | 5 ++++- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/config/envoyconfig/listeners_test.go b/config/envoyconfig/listeners_test.go index 44d2c4b0d..85502cf42 100644 --- a/config/envoyconfig/listeners_test.go +++ b/config/envoyconfig/listeners_test.go @@ -205,7 +205,7 @@ func Test_buildMainHTTPConnectionManagerFilter(t *testing.T) { "typedConfig": { "@type": "type.googleapis.com/envoy.extensions.filters.http.lua.v3.Lua", "defaultSourceCode": { - "inlineString": "function replace_prefix(str, prefix, value)\n return str:gsub(\"^\"..prefix, value)\nend\n\nfunction envoy_on_request(request_handle)\nend\n\nfunction envoy_on_response(response_handle)\n local headers = response_handle:headers()\n local metadata = response_handle:metadata()\n\n -- should be in the form:\n -- [{\n -- \"header\":\"Location\",\n -- \"prefix\":\"http://localhost:8000/two/\",\n -- \"value\":\"http://frontend/one/\"\n -- }]\n local rewrite_response_headers = metadata:get(\"rewrite_response_headers\")\n if rewrite_response_headers then\n for _, obj in pairs(rewrite_response_headers) do\n local hdr = headers:get(obj.header)\n if hdr ~= nil then\n local newhdr = replace_prefix(hdr, obj.prefix, obj.value)\n headers:replace(obj.header, newhdr)\n end\n end\n end\nend\n" + "inlineString": "function replace_prefix(str, prefix, value)\n if str:sub(0, prefix:len()) == prefix then\n return value..str:sub(prefix:len()+1)\n end\n return str\nend\n\nfunction envoy_on_request(request_handle)\nend\n\nfunction envoy_on_response(response_handle)\n local headers = response_handle:headers()\n local metadata = response_handle:metadata()\n\n -- should be in the form:\n -- [{\n -- \"header\":\"Location\",\n -- \"prefix\":\"http://localhost:8000/two/\",\n -- \"value\":\"http://frontend/one/\"\n -- }]\n local rewrite_response_headers = metadata:get(\"rewrite_response_headers\")\n if rewrite_response_headers then\n for _, obj in pairs(rewrite_response_headers) do\n local hdr = headers:get(obj.header)\n if hdr ~= nil then\n local newhdr = replace_prefix(hdr, obj.prefix, obj.value)\n headers:replace(obj.header, newhdr)\n end\n end\n end\nend\n" } } }, diff --git a/config/envoyconfig/lua_test.go b/config/envoyconfig/lua_test.go index 796ce46c7..b3badf32e 100644 --- a/config/envoyconfig/lua_test.go +++ b/config/envoyconfig/lua_test.go @@ -54,13 +54,13 @@ func TestLuaRewriteHeaders(t *testing.T) { require.NoError(t, err) headers := map[string]string{ - "Location": "https://localhost:8080/two/some/uri/", + "Location": "https://domain-with-dashes:8080/two/some/uri/", } metadata := map[string]interface{}{ "rewrite_response_headers": []interface{}{ map[string]interface{}{ "header": "Location", - "prefix": "https://localhost:8080/two/", + "prefix": "https://domain-with-dashes:8080/two/", "value": "https://frontend/one/", }, map[string]interface{}{ diff --git a/config/envoyconfig/luascripts/rewrite-headers.lua b/config/envoyconfig/luascripts/rewrite-headers.lua index ec1867e01..58dcfa40e 100644 --- a/config/envoyconfig/luascripts/rewrite-headers.lua +++ b/config/envoyconfig/luascripts/rewrite-headers.lua @@ -1,5 +1,8 @@ function replace_prefix(str, prefix, value) - return str:gsub("^"..prefix, value) + if str:sub(0, prefix:len()) == prefix then + return value..str:sub(prefix:len()+1) + end + return str end function envoy_on_request(request_handle)