scrub all requests and auth header, fix changeReader stall - fixes #255, #257 (#256)
* scrub all requests and auth header - fixes #255
* change changeReader to max out retry back-off at one minute, instead of infinite - fixes #257
* also scrub URL for response headers - #256
diff --git a/lib/changesreader.js b/lib/changesreader.js
index 6789710..cf2a7c6 100644
--- a/lib/changesreader.js
+++ b/lib/changesreader.js
@@ -210,7 +210,7 @@
self.continue = false
} else {
// don't immediately retry on error - exponential back-off
- delay = delay ? Math.max(60000, delay * 2) : 5000
+ delay = delay ? Math.min(60000, delay * 2) : 5000 // up to and no more than one minute
}
self.ee.emit(EVENT_ERROR, err)
diff --git a/lib/nano.js b/lib/nano.js
index 9295779..5a4ee28 100644
--- a/lib/nano.js
+++ b/lib/nano.js
@@ -101,6 +101,22 @@
}
return str
}
+
+ function scrubRequest (req, cloned) {
+ // scrub credentials
+ req.url = scrubURL(req.url)
+ if (req.headers.cookie) {
+ req.headers.cookie = 'XXXXXXX'
+ }
+ if (req.auth) {
+ if (!cloned) {
+ req.auth = JSON.parse(JSON.stringify(req.auth)) // clone just auth if not already cloned
+ }
+ req.auth.username = SCRUBBED_STR
+ req.auth.password = SCRUBBED_STR
+ }
+ }
+
const responseHandler = function (response, req, opts, resolve, reject, callback) {
const statusCode = response.status || (response.response && response.response.status) || 500
if (response.isAxiosError && response.response) {
@@ -111,7 +127,7 @@
// let parsed
const responseHeaders = Object.assign({
- uri: req.url,
+ uri: scrubURL(req.url),
statusCode: statusCode
}, response.headers)
if (!response.status) {
@@ -163,11 +179,7 @@
delete body.stack
// scrub credentials
- req.url = scrubURL(req.url)
- responseHeaders.uri = scrubURL(responseHeaders.uri)
- if (req.headers.cookie) {
- req.headers.cookie = 'XXXXXXX'
- }
+ scrubRequest(req)
log({ err: 'couch', body: body, headers: responseHeaders })
@@ -201,6 +213,8 @@
}
const message = response.statusText
+ scrubRequest(req)
+
const responseHeaders = Object.assign({
uri: req.url,
statusCode: statusCode
@@ -368,11 +382,7 @@
// scrub and log
const scrubbedReq = JSON.parse(JSON.stringify(req))
- scrubbedReq.url = scrubURL(scrubbedReq.url)
- if (scrubbedReq.auth) {
- scrubbedReq.auth.username = SCRUBBED_STR
- scrubbedReq.auth.password = SCRUBBED_STR
- }
+ scrubRequest(scrubbedReq, true)
log(scrubbedReq)
// add http agents