diff --git a/src/envoy-proxy/config/envoy-config.yaml b/src/envoy-proxy/config/envoy-config.yaml index 2a53eb34..399752e5 100644 --- a/src/envoy-proxy/config/envoy-config.yaml +++ b/src/envoy-proxy/config/envoy-config.yaml @@ -50,7 +50,17 @@ static_resources: timestamp: "%START_TIME%" upstream_remote_address: "%UPSTREAM_REMOTE_ADDRESS%" user_agent: "%REQ(User-Agent)%" + payload: "%DYNAMIC_METADATA(envoy.filters.http.lua.request-filter:payload)%" http_filters: + - name: envoy.filters.http.lua + typed_config: + "@type": type.googleapis.com/envoy.extensions.filters.http.lua.v3.Lua + default_source_code: + inline_string: | + local request_logger = require("/etc/envoy/unguard/request-logger") + function envoy_on_request(request_handle) + request_logger.log_payload(request_handle) + end - name: envoy.filters.http.router typed_config: "@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router diff --git a/src/envoy-proxy/config/request-logger.lua b/src/envoy-proxy/config/request-logger.lua new file mode 100644 index 00000000..e172c00d --- /dev/null +++ b/src/envoy-proxy/config/request-logger.lua @@ -0,0 +1,16 @@ +local request_logger = {} + +function request_logger.log_payload(handle) + local payload = "" + for chunk in handle:bodyChunks() do + local chunk_length = chunk:length() + if (chunk_length > 0) then + payload = payload .. chunk:getBytes(0, chunk_length) + end + end + payload = tostring(payload) + handle:streamInfo():dynamicMetadata():set("envoy.filters.http.lua.request-filter", "payload", payload) + return payload +end + +return request_logger