fix: improved compatiblity with SVR.JS Cache mod on Node.js
This commit is contained in:
parent
f573da97d3
commit
304664a9e9
1 changed files with 21 additions and 19 deletions
40
src/index.js
40
src/index.js
|
@ -51,7 +51,8 @@ module.exports = (req, res, logFacilities, config, next) => {
|
||||||
const originalWriteHead = res.writeHead.bind(res);
|
const originalWriteHead = res.writeHead.bind(res);
|
||||||
const originalWrite = res.write.bind(res);
|
const originalWrite = res.write.bind(res);
|
||||||
const originalEnd = res.end.bind(res);
|
const originalEnd = res.end.bind(res);
|
||||||
let writtenHeaders = res.getHeaders();
|
let checkedHeaders = res.getHeaders();
|
||||||
|
let writtenHeaders = {};
|
||||||
let writtenStatusCode = 200;
|
let writtenStatusCode = 200;
|
||||||
let writtenStatusCodeDescription = null;
|
let writtenStatusCodeDescription = null;
|
||||||
let headersSet = false;
|
let headersSet = false;
|
||||||
|
@ -60,36 +61,37 @@ module.exports = (req, res, logFacilities, config, next) => {
|
||||||
const responseWriteCallbacks = [];
|
const responseWriteCallbacks = [];
|
||||||
|
|
||||||
res.setHeader = function (name, value) {
|
res.setHeader = function (name, value) {
|
||||||
writtenHeaders[name.toLowerCase()] = value;
|
checkedHeaders[name.toLowerCase()] = value;
|
||||||
return originalSetHeader(name, value);
|
return originalSetHeader(name, value);
|
||||||
};
|
};
|
||||||
|
|
||||||
res.removeHeader = function (name) {
|
res.removeHeader = function (name) {
|
||||||
delete writtenHeaders[name.toLowerCase()];
|
delete checkedHeaders[name.toLowerCase()];
|
||||||
return originalRemoveHeader(name);
|
return originalRemoveHeader(name);
|
||||||
};
|
};
|
||||||
|
|
||||||
res.writeHead = function (statusCode, statusCodeDescription, headers) {
|
res.writeHead = function (statusCode, statusCodeDescription, headers) {
|
||||||
const properHeaders = headers ? headers : statusCodeDescription;
|
const properHeaders = headers ? headers : statusCodeDescription;
|
||||||
if (typeof properHeaders === "object" && properHeaders !== null) {
|
if (typeof properHeaders === "object" && properHeaders !== null) {
|
||||||
|
writtenHeaders = properHeaders;
|
||||||
Object.keys(properHeaders).forEach((key) => {
|
Object.keys(properHeaders).forEach((key) => {
|
||||||
writtenHeaders[key.toLowerCase()] = properHeaders[key];
|
checkedHeaders[key.toLowerCase()] = properHeaders[key];
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
writtenStatusCode = statusCode;
|
writtenStatusCode = statusCode;
|
||||||
let intervene = false;
|
let intervene = false;
|
||||||
Object.keys(writtenHeaders).every((key) => {
|
Object.keys(checkedHeaders).every((key) => {
|
||||||
if (typeof writtenHeaders[key] == "string") {
|
if (typeof checkedHeaders[key] == "string") {
|
||||||
securityResponse = transaction.addResponseHeader(
|
securityResponse = transaction.addResponseHeader(
|
||||||
key,
|
key,
|
||||||
writtenHeaders[key]
|
checkedHeaders[key]
|
||||||
);
|
);
|
||||||
if (typeof securityResponse === "object") {
|
if (typeof securityResponse === "object") {
|
||||||
intervene = true;
|
intervene = true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} else if (Array.isArray(writtenHeaders[key])) {
|
} else if (Array.isArray(checkedHeaders[key])) {
|
||||||
writtenHeaders[key].every((value) => {
|
checkedHeaders[key].every((value) => {
|
||||||
securityResponse = transaction.addResponseHeader(key, value);
|
securityResponse = transaction.addResponseHeader(key, value);
|
||||||
if (typeof securityResponse === "object") {
|
if (typeof securityResponse === "object") {
|
||||||
intervene = true;
|
intervene = true;
|
||||||
|
@ -145,18 +147,18 @@ module.exports = (req, res, logFacilities, config, next) => {
|
||||||
res.end = function (chunk, encoding, callback) {
|
res.end = function (chunk, encoding, callback) {
|
||||||
if (!headersSet) {
|
if (!headersSet) {
|
||||||
let intervene = false;
|
let intervene = false;
|
||||||
Object.keys(writtenHeaders).forEach((key) => {
|
Object.keys(checkedHeaders).forEach((key) => {
|
||||||
if (typeof writtenHeaders[key] == "string") {
|
if (typeof checkedHeaders[key] == "string") {
|
||||||
securityResponse = transaction.addResponseHeader(
|
securityResponse = transaction.addResponseHeader(
|
||||||
key,
|
key,
|
||||||
writtenHeaders[key]
|
checkedHeaders[key]
|
||||||
);
|
);
|
||||||
if (typeof securityResponse === "object") {
|
if (typeof securityResponse === "object") {
|
||||||
intervene = true;
|
intervene = true;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else if (Array.isArray(writtenHeaders[key])) {
|
} else if (Array.isArray(checkedHeaders[key])) {
|
||||||
writtenHeaders[key].forEach((value) => {
|
checkedHeaders[key].forEach((value) => {
|
||||||
securityResponse = transaction.addResponseHeader(key, value);
|
securityResponse = transaction.addResponseHeader(key, value);
|
||||||
if (typeof securityResponse === "object") {
|
if (typeof securityResponse === "object") {
|
||||||
intervene = true;
|
intervene = true;
|
||||||
|
@ -269,18 +271,18 @@ module.exports = (req, res, logFacilities, config, next) => {
|
||||||
res.write = function (chunk, encoding, callback) {
|
res.write = function (chunk, encoding, callback) {
|
||||||
if (!headersSet) {
|
if (!headersSet) {
|
||||||
let intervene = false;
|
let intervene = false;
|
||||||
Object.keys(writtenHeaders).every((key) => {
|
Object.keys(checkedHeaders).every((key) => {
|
||||||
if (typeof writtenHeaders[key] == "string") {
|
if (typeof checkedHeaders[key] == "string") {
|
||||||
securityResponse = transaction.addResponseHeader(
|
securityResponse = transaction.addResponseHeader(
|
||||||
key,
|
key,
|
||||||
writtenHeaders[key]
|
checkedHeaders[key]
|
||||||
);
|
);
|
||||||
if (typeof securityResponse === "object") {
|
if (typeof securityResponse === "object") {
|
||||||
intervene = true;
|
intervene = true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} else if (Array.isArray(writtenHeaders[key])) {
|
} else if (Array.isArray(checkedHeaders[key])) {
|
||||||
writtenHeaders[key].every((value) => {
|
checkedHeaders[key].every((value) => {
|
||||||
securityResponse = transaction.addResponseHeader(key, value);
|
securityResponse = transaction.addResponseHeader(key, value);
|
||||||
if (typeof securityResponse === "object") {
|
if (typeof securityResponse === "object") {
|
||||||
intervene = true;
|
intervene = true;
|
||||||
|
|
Loading…
Reference in a new issue