* Fixed #3520 Validate accepted status codes type Signed-off-by: Matthew Nickson <mnickson@sidingsmedia.com> * Avoid crash on invalid status code Instead of failing on an invalid status code, log the error and skip to next. Signed-off-by: Matthew Nickson <mnickson@sidingsmedia.com> --------- Signed-off-by: Matthew Nickson <mnickson@sidingsmedia.com>
This commit is contained in:
parent
2921f33c24
commit
71fca3f0c3
|
@ -641,6 +641,10 @@ let needSetup = false;
|
||||||
let notificationIDList = monitor.notificationIDList;
|
let notificationIDList = monitor.notificationIDList;
|
||||||
delete monitor.notificationIDList;
|
delete monitor.notificationIDList;
|
||||||
|
|
||||||
|
// Ensure status code ranges are strings
|
||||||
|
if (!monitor.accepted_statuscodes.every((code) => typeof code === "string")) {
|
||||||
|
throw new Error("Accepted status codes are not all strings");
|
||||||
|
}
|
||||||
monitor.accepted_statuscodes_json = JSON.stringify(monitor.accepted_statuscodes);
|
monitor.accepted_statuscodes_json = JSON.stringify(monitor.accepted_statuscodes);
|
||||||
delete monitor.accepted_statuscodes;
|
delete monitor.accepted_statuscodes;
|
||||||
|
|
||||||
|
@ -706,6 +710,11 @@ let needSetup = false;
|
||||||
removeGroupChildren = true;
|
removeGroupChildren = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Ensure status code ranges are strings
|
||||||
|
if (!monitor.accepted_statuscodes.every((code) => typeof code === "string")) {
|
||||||
|
throw new Error("Accepted status codes are not all strings");
|
||||||
|
}
|
||||||
|
|
||||||
bean.name = monitor.name;
|
bean.name = monitor.name;
|
||||||
bean.description = monitor.description;
|
bean.description = monitor.description;
|
||||||
bean.parent = monitor.parent;
|
bean.parent = monitor.parent;
|
||||||
|
|
|
@ -720,7 +720,6 @@ exports.checkCertificate = function (res) {
|
||||||
* @param {number} status The status code to check
|
* @param {number} status The status code to check
|
||||||
* @param {string[]} acceptedCodes An array of accepted status codes
|
* @param {string[]} acceptedCodes An array of accepted status codes
|
||||||
* @returns {boolean} True if status code within range, false otherwise
|
* @returns {boolean} True if status code within range, false otherwise
|
||||||
* @throws {Error} Will throw an error if the provided status code is not a valid range string or code string
|
|
||||||
*/
|
*/
|
||||||
exports.checkStatusCode = function (status, acceptedCodes) {
|
exports.checkStatusCode = function (status, acceptedCodes) {
|
||||||
if (acceptedCodes == null || acceptedCodes.length === 0) {
|
if (acceptedCodes == null || acceptedCodes.length === 0) {
|
||||||
|
@ -728,6 +727,11 @@ exports.checkStatusCode = function (status, acceptedCodes) {
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const codeRange of acceptedCodes) {
|
for (const codeRange of acceptedCodes) {
|
||||||
|
if (typeof codeRange !== "string") {
|
||||||
|
log.error("monitor", `Accepted status code not a string. ${codeRange} is of type ${typeof codeRange}`);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
const codeRangeSplit = codeRange.split("-").map(string => parseInt(string));
|
const codeRangeSplit = codeRange.split("-").map(string => parseInt(string));
|
||||||
if (codeRangeSplit.length === 1) {
|
if (codeRangeSplit.length === 1) {
|
||||||
if (status === codeRangeSplit[0]) {
|
if (status === codeRangeSplit[0]) {
|
||||||
|
@ -738,7 +742,8 @@ exports.checkStatusCode = function (status, acceptedCodes) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
throw new Error("Invalid status code range");
|
log.error("monitor", `${codeRange} is not a valid status code range`);
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue