diff --git a/README.md b/README.md index aa86d0c..2592695 100644 --- a/README.md +++ b/README.md @@ -230,10 +230,9 @@ The `EchoRequestProcessor` is an example of using an ExtProc to _respond_ to a r envoyexternalprocessor-echo-1 | Aug 20, 2023 3:27:40 PM extproc.processors.EchoRequestProcessor processRequestHeaders envoyexternalprocessor-echo-1 | INFO: EchoRequestProcessor.processRequestBody: /echo/hello responding before upstream ``` -and a JSON response like +and a response like ```json { - "path": "/echo/hello", "body": "some data here" } ``` diff --git a/src/main/java/com/github/wrossmorrow/extproc/processors/DigestRequestProcessor.java b/src/main/java/com/github/wrossmorrow/extproc/processors/DigestRequestProcessor.java index eda6415..4561b69 100644 --- a/src/main/java/com/github/wrossmorrow/extproc/processors/DigestRequestProcessor.java +++ b/src/main/java/com/github/wrossmorrow/extproc/processors/DigestRequestProcessor.java @@ -36,7 +36,7 @@ public void shutdown() { } public void processRequestHeaders(RequestContext ctx, Map headers) { - StringBuilder hashtext = new StringBuilder(ctx.getMethod() + ":" + ctx.getPath() + ":"); + StringBuilder hashtext = new StringBuilder(ctx.getMethod() + ":" + ctx.getPath()); if (ctx.streamComplete()) { String digest = SHAHash(hashtext); ctx.addHeader("x-extproc-request-digest", digest); @@ -47,6 +47,7 @@ public void processRequestHeaders(RequestContext ctx, Map header public void processRequestBody(RequestContext ctx, String body) { StringBuilder hashtext = hashtexts.get(ctx.getRequestId()); + hashtext.append(":"); hashtext.append(body); if (ctx.streamComplete()) { String digest = SHAHash(hashtext); @@ -61,19 +62,15 @@ public void processResponseHeaders(RequestContext ctx, Map heade if (ctx.streamComplete()) { String digest = digests.getOrDefault(ctx.getRequestId(), ""); ctx.addHeader("x-extproc-request-digest", digest); - ctx.addHeader("x-extproc-response-digest", digest); hashtexts.remove(ctx.getRequestId()); digests.remove(ctx.getRequestId()); } } public void processResponseBody(RequestContext ctx, String body) { - StringBuilder hashtext = hashtexts.get(ctx.getRequestId()); - hashtext.append(body); if (ctx.streamComplete()) { - String digest = digests.get(ctx.getRequestId()); + String digest = digests.getOrDefault(ctx.getRequestId(), ""); ctx.addHeader("x-extproc-request-digest", digest); - ctx.addHeader("x-extproc-response-digest", SHAHash(hashtext)); hashtexts.remove(ctx.getRequestId()); digests.remove(ctx.getRequestId()); } diff --git a/src/main/java/com/github/wrossmorrow/extproc/processors/EchoRequestProcessor.java b/src/main/java/com/github/wrossmorrow/extproc/processors/EchoRequestProcessor.java index 03d1c7a..8852a48 100644 --- a/src/main/java/com/github/wrossmorrow/extproc/processors/EchoRequestProcessor.java +++ b/src/main/java/com/github/wrossmorrow/extproc/processors/EchoRequestProcessor.java @@ -6,9 +6,11 @@ import com.github.wrossmorrow.extproc.RequestProcessorHealthManager; import java.util.Map; import java.util.logging.Logger; +import java.util.regex.Pattern; public class EchoRequestProcessor implements RequestProcessor { private static final Logger logger = Logger.getLogger(EchoRequestProcessor.class.getName()); + private static final Pattern ECHO_PATH = Pattern.compile("/echo/.*"); public String getName() { return "echo"; @@ -25,26 +27,24 @@ public void shutdown() { } public void processRequestHeaders(RequestContext ctx, Map headers) { - if (ctx.getPath().startsWith("/echo")) { + if (ECHO_PATH.matcher(ctx.getPath()).matches()) { if (ctx.streamComplete()) { logger.info( "EchoRequestProcessor.processRequestHeaders: " + ctx.getPath() + " responding before upstream"); - String jsonResponse = "{\"path\": \"" + ctx.getPath() + "\"}"; - ctx.cancelRequest(200, ctx.getRequestHeaders(), jsonResponse); + ctx.cancelRequest(200, ctx.getRequestHeaders(), ""); } } } public void processRequestBody(RequestContext ctx, String body) { - if (ctx.getPath().startsWith("/echo")) { + if (ECHO_PATH.matcher(ctx.getPath()).matches()) { logger.info( "EchoRequestProcessor.processRequestBody: " + ctx.getPath() + " responding before upstream"); - String jsonResponse = "{\"path\": \"" + ctx.getPath() + "\", \"body\": \"" + body + "\"}"; - ctx.cancelRequest(200, ctx.getRequestHeaders(), jsonResponse); + ctx.cancelRequest(200, ctx.getRequestHeaders(), body); } }