From 707b31145670cff12edf4369dd313ceb82b4ac71 Mon Sep 17 00:00:00 2001 From: Leonid Bugaev Date: Thu, 7 Mar 2019 22:45:17 +0100 Subject: [PATCH] Add `deleteHttpCookie` method (#658) Version bumped to 1.0, together with upcoming GoReplay release --- middleware/README.md | 1 + middleware/middleware.js | 19 ++++++++++++++++++- middleware/package.json | 2 +- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/middleware/README.md b/middleware/README.md index 8a70389..7cf198b 100644 --- a/middleware/README.md +++ b/middleware/README.md @@ -112,6 +112,7 @@ Package expose following functions to process raw HTTP payloads: * `setHttpBodyParam` - set POST body param: `req.http = gor.setHttpBodyParam(req.http, param, value)` * `httpCookie` - get HTTP cookie: `gor.httpCookie(req.http, "SESSSION_ID")` * `setHttpCookie` - set HTTP cookie, returns modified payload: `req.http = gor.setHttpCookie(req.http, "iam", "cuckoo")` +* `deleteHttpCookie` - delete HTTP cookie, returns modified payload: `req.http = gor.deleteHttpCookie(req.http, "iam")` Also it is totally legit to use standard `Buffer` functions like `indexOf` for processing the HTTP payload. Just do not forget that if you modify the body, update the `Content-Length` header with a new value. And if you modify any of the headers, line endings should be `\r\n`. Rest is up to your imagination. diff --git a/middleware/middleware.js b/middleware/middleware.js index 5c7b4ac..6c75323 100755 --- a/middleware/middleware.js +++ b/middleware/middleware.js @@ -381,6 +381,13 @@ function setHttpCookie(payload, name, value) { return setHttpHeader(payload, "Cookie", cookies.join("; ")) } +function deleteHttpCookie(payload, name) { + let h = httpHeader(payload, "Cookie"); + let cookie = h ? h.value : ""; + let cookies = cookie.split("; ").filter(function(v){ return v.indexOf(name + "=") != 0 }) + return setHttpHeader(payload, "Cookie", cookies.join("; ")) +} + function httpCookie(payload, name) { let h = httpHeader(payload, "Cookie"); let cookie = h ? h.value : ""; @@ -414,6 +421,7 @@ module.exports = { setHttpBodyParam: setHttpBodyParam, httpCookie: httpCookie, setHttpCookie: setHttpCookie, + deleteHttpCookie: deleteHttpCookie, test: testRunner, benchmark: testBenchmark, httpHeaders: httpHeaders @@ -423,7 +431,7 @@ module.exports = { // =========== Tests ============== function testRunner(){ - ["init", "filter", "parseMessage", "httpMethod", "httpPath", "setHttpHeader", "deleteHttpHeader", "httpPathParam", "httpHeader", "httpBody", "setHttpBody", "httpBodyParam", "httpCookie", "setHttpCookie", "httpHeaders"].forEach(function(t){ + ["init", "filter", "parseMessage", "httpMethod", "httpPath", "setHttpHeader", "deleteHttpHeader", "httpPathParam", "httpHeader", "httpBody", "setHttpBody", "httpBodyParam", "httpCookie", "setHttpCookie", "deleteHttpCookie", "httpHeaders"].forEach(function(t){ console.log(`====== Start ${t} =======`) eval(`TEST_${t}()`) console.log(`====== End ${t} =======`) @@ -739,6 +747,15 @@ function TEST_setHttpCookie() { } } +function TEST_deleteHttpCookie() { + const examplePayload = "GET / HTTP/1.1\r\nCookie: a=b; test=zxc\r\n\r\n"; + let p = deleteHttpCookie(Buffer.from(examplePayload), "a"); + if (p != "GET / HTTP/1.1\r\nCookie: test=zxc\r\n\r\n") { + return fail(`Should delete cookie: ${p}`) + } +} + + function TEST_httpHeaders() { const examplePayload = "GET / HTTP/1.1\r\nHost: localhost:3000\r\nUser-Agent: Node\r\nContent-Length:5\r\n\r\nhello"; diff --git a/middleware/package.json b/middleware/package.json index c7ca3bf..97fabe3 100644 --- a/middleware/package.json +++ b/middleware/package.json @@ -1,6 +1,6 @@ { "name": "goreplay_middleware", - "version": "0.1.19", + "version": "1.0.0", "description": "Package for writing middleware for GoReplay https://goreplay.org", "main": "middleware.js", "scripts": {