From f5f4835b743a4119517937083de80979d9fc29e1 Mon Sep 17 00:00:00 2001
From: Louis Lam <louislam@users.noreply.github.com>
Date: Wed, 27 Oct 2021 16:03:16 +0800
Subject: [PATCH] [certificate notification] clear sent history if the cert is
 changed

---
 server/model/monitor.js | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/server/model/monitor.js b/server/model/monitor.js
index 01d0a1f5..7f56cd42 100644
--- a/server/model/monitor.js
+++ b/server/model/monitor.js
@@ -455,6 +455,27 @@ class Monitor extends BeanModel {
             tls_info_bean = R.dispense("monitor_tls_info");
             tls_info_bean.monitor_id = this.id;
         }
+
+        // Clear sent history if the cert changed.
+        let oldCertInfo = JSON.parse(tls_info_bean.info_json);
+
+        let isValidObjects = oldCertInfo && oldCertInfo.certInfo && checkCertificateResult && checkCertificateResult.certInfo;
+
+        if (isValidObjects) {
+            if (oldCertInfo.certInfo.fingerprint256 !== checkCertificateResult.certInfo.fingerprint256) {
+                debug("Resetting sent_history");
+                await R.exec("DELETE FROM notification_sent_history WHERE type = 'certificate' AND monitor_id = ?", [
+                    this.id
+                ]);
+            } else {
+                debug("No need to reset sent_history");
+                debug(oldCertInfo.certInfo.fingerprint256);
+                debug(checkCertificateResult.certInfo.fingerprint256);
+            }
+        } else {
+            debug("Not valid object");
+        }
+
         tls_info_bean.info_json = JSON.stringify(checkCertificateResult);
         await R.store(tls_info_bean);