From 885e66220631e52993b282eb4c75fb3927556066 Mon Sep 17 00:00:00 2001 From: Joseph <40335314+JRedOW@users.noreply.github.com> Date: Sun, 16 Feb 2025 01:10:24 +0000 Subject: [PATCH 1/4] Refresh Certificate Expiry Times on Status Pages --- server/routers/status-page-router.js | 31 +++++++++++++++++++++++++++- src/components/PublicGroupList.vue | 28 ++++++++++++++++--------- src/pages/StatusPage.vue | 5 +++-- 3 files changed, 51 insertions(+), 13 deletions(-) diff --git a/server/routers/status-page-router.js b/server/routers/status-page-router.js index 893f57564..70c448d2d 100644 --- a/server/routers/status-page-router.js +++ b/server/routers/status-page-router.js @@ -70,10 +70,12 @@ router.get("/api/status-page/heartbeat/:slug", cache("1 minutes"), async (reques try { let heartbeatList = {}; let uptimeList = {}; + let certificateExpiryList = {}; let slug = request.params.slug; slug = slug.toLowerCase(); let statusPageID = await StatusPage.slugToID(slug); + let showCertificateExpiry = !!(await R.getCell("SELECT show_certificate_expiry FROM status_page WHERE id = ? ", [ statusPageID ])); let monitorIDList = await R.getCol(` SELECT monitor_group.monitor_id FROM monitor_group, \`group\` @@ -99,11 +101,38 @@ router.get("/api/status-page/heartbeat/:slug", cache("1 minutes"), async (reques const uptimeCalculator = await UptimeCalculator.getUptimeCalculator(monitorID); uptimeList[`${monitorID}_24`] = uptimeCalculator.get24Hour().uptime; + + // Get Certificate Status (Copied from monitor.js getCertExpiry()) + if (showCertificateExpiry) { + let tlsInfoBean = await R.findOne("monitor_tls_info", "monitor_id = ?", [ + monitorID, + ]); + let tlsInfo; + if (tlsInfoBean) { + tlsInfo = JSON.parse(tlsInfoBean?.info_json); + if (tlsInfo?.valid && tlsInfo?.certInfo?.daysRemaining) { + certificateExpiryList[monitorID] = { + certExpiryDaysRemaining: tlsInfo.certInfo.daysRemaining, + validCert: true + }; + certificateExpiryList[monitorID] = { + certExpiryDaysRemaining: "10", + validCert: true + }; + } else { + certificateExpiryList[monitorID] = { + certExpiryDaysRemaining: "", + validCert: false + }; + } + } + } } response.json({ heartbeatList, - uptimeList + uptimeList, + certificateExpiryList }); } catch (error) { diff --git a/src/components/PublicGroupList.vue b/src/components/PublicGroupList.vue index bacddbf13..a870eeaee 100644 --- a/src/components/PublicGroupList.vue +++ b/src/components/PublicGroupList.vue @@ -63,8 +63,15 @@