From ced1bf978893905baff402bf277b0823c826cfc0 Mon Sep 17 00:00:00 2001 From: Alex Holliday Date: Wed, 16 Oct 2024 11:44:36 +0800 Subject: [PATCH] Refactor getting certificate to use TLS instead of SSL-checker --- Server/controllers/controllerUtils.js | 74 +++++++++++++++++++++++---- 1 file changed, 64 insertions(+), 10 deletions(-) diff --git a/Server/controllers/controllerUtils.js b/Server/controllers/controllerUtils.js index d59314913..f349fab08 100644 --- a/Server/controllers/controllerUtils.js +++ b/Server/controllers/controllerUtils.js @@ -1,16 +1,70 @@ +import sslChecker from "ssl-checker"; +import * as tls from "tls"; + const handleValidationError = (error, serviceName) => { - error.status = 422; - error.service = serviceName; - error.message = - error.details?.[0]?.message || error.message || "Validation Error"; - return error; + error.status = 422; + error.service = serviceName; + error.message = error.details?.[0]?.message || error.message || "Validation Error"; + return error; }; const handleError = (error, serviceName, method, status = 500) => { - error.status === undefined ? (error.status = status) : null; - error.service === undefined ? (error.service = serviceName) : null; - error.method === undefined ? (error.method = method) : null; - return error; + error.status === undefined ? (error.status = status) : null; + error.service === undefined ? (error.service = serviceName) : null; + error.method === undefined ? (error.method = method) : null; + return error; }; -export { handleValidationError, handleError }; +const fetchMonitorCertificate = async (monitor) => { + return new Promise((resolve, reject) => { + try { + const monitorUrl = new URL(monitor.url); + const hostname = monitorUrl.hostname; + let socket = tls.connect( + { + port: 443, + host: hostname, + servername: hostname, // this is required in case the server enabled SNI + }, + () => { + try { + let x509Certificate = socket.getPeerX509Certificate(); + resolve(x509Certificate); + } catch (error) { + reject(error); + } finally { + socket.end(); + } + } + ); + socket.on("error", (error) => { + console.log(error); + reject( + new Error( + `TLS connection error while fetching certificate from ${error.hostname}` + ) + ); + }); + } catch (error) { + reject(error); + } + }); +}; + +const test = async () => { + let host = "httpbin.org"; + console.log(cert.validTo); + let socket = tls.connect( + { + port: 443, + host, + servername: host, // this is required in case the server enabled SNI + }, + () => { + let x509Certificate = socket.getPeerX509Certificate(); + console.log(x509Certificate.validTo); + } + ); +}; + +export { handleValidationError, handleError, fetchMonitorCertificate, test };