From 2af41625a4bea91e79f6ebf2322a92bf6a6d10bb Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Mon, 18 Nov 2024 21:59:46 +0000 Subject: [PATCH 1/3] fix(deps): update dependency mongoose to v8.8.2 --- Server/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Server/package-lock.json b/Server/package-lock.json index 810240a29..51650d19a 100644 --- a/Server/package-lock.json +++ b/Server/package-lock.json @@ -4522,9 +4522,9 @@ } }, "node_modules/mongoose": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.8.1.tgz", - "integrity": "sha512-l7DgeY1szT98+EKU8GYnga5WnyatAu+kOQ2VlVX1Mxif6A0Umt0YkSiksCiyGxzx8SPhGe9a53ND1GD4yVDrPA==", + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.8.2.tgz", + "integrity": "sha512-jCTSqDANfRzk909v4YoZQi7jlGRB2MTvgG+spVBc/BA4tOs1oWJr//V6yYujqNq9UybpOtsSfBqxI0dSOEFJHQ==", "license": "MIT", "dependencies": { "bson": "^6.7.0", From b5cfd834705a6223ad78ab9edc4e27b66c33a5a9 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Tue, 19 Nov 2024 19:00:13 +0000 Subject: [PATCH 2/3] fix(deps): update dependency bullmq to v5.28.0 --- Server/package-lock.json | 8 ++++---- Server/package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Server/package-lock.json b/Server/package-lock.json index 810240a29..c76e70f96 100644 --- a/Server/package-lock.json +++ b/Server/package-lock.json @@ -11,7 +11,7 @@ "dependencies": { "axios": "^1.7.2", "bcrypt": "^5.1.1", - "bullmq": "5.26.2", + "bullmq": "5.28.0", "cors": "^2.8.5", "dockerode": "4.0.2", "dotenv": "^16.4.5", @@ -1217,9 +1217,9 @@ } }, "node_modules/bullmq": { - "version": "5.26.2", - "resolved": "https://registry.npmjs.org/bullmq/-/bullmq-5.26.2.tgz", - "integrity": "sha512-UdHBrJoRkpXoF8b/FVEkuRBnaUZoA7+qHQNyTx1n2oNVZ4iWxqGqss+M9xAwXOpBmSNvOSlaBdHpf+5QJTU8GQ==", + "version": "5.28.0", + "resolved": "https://registry.npmjs.org/bullmq/-/bullmq-5.28.0.tgz", + "integrity": "sha512-HyYr6bfbBuzfyUvRkP6Ux1Zrv2eZcM4zXMl90Q7oneORp3jKnXYyqjCewJGAoo4PqKyE4TWCcdUnFkdxAzysng==", "license": "MIT", "dependencies": { "cron-parser": "^4.6.0", diff --git a/Server/package.json b/Server/package.json index 14c5c93fe..44a8947d7 100644 --- a/Server/package.json +++ b/Server/package.json @@ -14,7 +14,7 @@ "dependencies": { "axios": "^1.7.2", "bcrypt": "^5.1.1", - "bullmq": "5.26.2", + "bullmq": "5.28.0", "cors": "^2.8.5", "dockerode": "4.0.2", "dotenv": "^16.4.5", From 58be0c018bd485e3398fbea10a6c5f8663d6eb11 Mon Sep 17 00:00:00 2001 From: Alex Holliday Date: Wed, 20 Nov 2024 10:37:01 +0800 Subject: [PATCH 3/3] rewrite monitor resolution check, update tests --- Server/controllers/monitorController.js | 18 +++++++------- .../controllers/monitorController.test.js | 24 ++++++++++--------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/Server/controllers/monitorController.js b/Server/controllers/monitorController.js index 0615578c4..0866017bf 100644 --- a/Server/controllers/monitorController.js +++ b/Server/controllers/monitorController.js @@ -19,7 +19,7 @@ import jwt from "jsonwebtoken"; import { getTokenFromHeaders } from "../utils/utils.js"; import logger from "../utils/logger.js"; import { handleError, handleValidationError } from "./controllerUtils.js"; -import dns from "dns"; +import axios from "axios"; const SERVICE_NAME = "monitorController"; @@ -288,18 +288,16 @@ const checkEndpointResolution = async (req, res, next) => { } try { - let { monitorURL } = req.query; - monitorURL = new URL(monitorURL); - await new Promise((resolve, reject) => { - dns.resolve(monitorURL.hostname, (error) => { - if (error) { - reject(error); - } - resolve(); - }); + const { monitorURL } = req.query; + const parsedUrl = new URL(monitorURL); + const response = await axios.get(parsedUrl, { + timeout: 5000, + validateStatus: () => true, }); return res.status(200).json({ success: true, + code: response.status, + statusText: response.statusText, msg: `URL resolved successfully`, }); } catch (error) { diff --git a/Server/tests/controllers/monitorController.test.js b/Server/tests/controllers/monitorController.test.js index 1074c35b1..1133f6be0 100644 --- a/Server/tests/controllers/monitorController.test.js +++ b/Server/tests/controllers/monitorController.test.js @@ -18,7 +18,7 @@ import jwt from "jsonwebtoken"; import sinon from "sinon"; import { successMessages } from "../../utils/messages.js"; import logger from "../../utils/logger.js"; -import dns from "dns"; +import axios from "axios"; const SERVICE_NAME = "monitorController"; describe("Monitor Controller - getAllMonitors", () => { @@ -476,38 +476,40 @@ describe("Monitor Controller - createMonitor", () => { }); }); -describe("Monitor Controllor - checkEndpointResolution", () => { - let req, res, next, dnsResolveStub; +describe("Monitor Controller - checkEndpointResolution", () => { + let req, res, next, axiosGetStub; beforeEach(() => { req = { query: { monitorURL: "https://example.com" } }; res = { status: sinon.stub().returnsThis(), json: sinon.stub() }; next = sinon.stub(); - dnsResolveStub = sinon.stub(dns, "resolve"); + axiosGetStub = sinon.stub(axios, "get"); }); afterEach(() => { - dnsResolveStub.restore(); + sinon.restore(); }); it("should resolve the URL successfully", async () => { - dnsResolveStub.callsFake((hostname, callback) => callback(null)); + axiosGetStub.resolves({ status: 200, statusText: "OK" }); await checkEndpointResolution(req, res, next); expect(res.status.calledWith(200)).to.be.true; expect( res.json.calledWith({ success: true, + code: 200, + statusText: "OK", msg: "URL resolved successfully", }) ).to.be.true; expect(next.called).to.be.false; }); - it("should return an error if DNS resolution fails", async () => { - const dnsError = new Error("DNS resolution failed"); - dnsError.code = "ENOTFOUND"; - dnsResolveStub.callsFake((hostname, callback) => callback(dnsError)); + it("should return an error if endpoint resolution fails", async () => { + const axiosError = new Error("resolution failed"); + axiosError.code = "ENOTFOUND"; + axiosGetStub.rejects(axiosError); await checkEndpointResolution(req, res, next); expect(next.calledOnce).to.be.true; const errorPassedToNext = next.getCall(0).args[0]; expect(errorPassedToNext).to.be.an.instanceOf(Error); - expect(errorPassedToNext.message).to.include("DNS resolution failed"); + expect(errorPassedToNext.message).to.include("resolution failed"); expect(errorPassedToNext.code).to.equal("ENOTFOUND"); expect(errorPassedToNext.status).to.equal(500); });