From afa6fb1b01588db1ee140ed58412f766290092d4 Mon Sep 17 00:00:00 2001
From: Adar Nimrod <nimrod@shore.co.il>
Date: Sat, 1 May 2021 00:11:49 +0300
Subject: [PATCH] Add SMTP checks.

---
 functions.tf |  1 +
 src/smtp.py  | 34 ++++++++++++++++++++++++++++++++++
 2 files changed, 35 insertions(+)
 create mode 100644 src/smtp.py

diff --git a/functions.tf b/functions.tf
index c5e13e3..0c8990c 100644
--- a/functions.tf
+++ b/functions.tf
@@ -14,6 +14,7 @@ locals {
     "transmission",
     "vouch",
     "ssh",
+    "smtp",
   ]
   function_names = [for name in local.functions : "${local.function_name_prefix}-${replace(name, "_", "")}"]
 }
diff --git a/src/smtp.py b/src/smtp.py
new file mode 100644
index 0000000..3b0509b
--- /dev/null
+++ b/src/smtp.py
@@ -0,0 +1,34 @@
+from smtplib import SMTP
+from utils import publish
+
+
+def check_smtp(port):
+    """Check the SMTP port."""
+    try:
+        smtp = SMTP("smtp.shore.co.il", port)
+        ehlo = smtp.ehlo()
+        if ehlo[0] != 250 or "LOGIN" in ehlo[1].decode().split():
+            return [False, f"First EHLO on port {port} failed."]
+        if smtp.starttls() != (220, b"TLS go ahead"):
+            return [False, f"STARTTLS on port {port} failed."]
+        ehlo = smtp.ehlo()
+        if ehlo[0] != 250 or "LOGIN" not in ehlo[1].decode().split():
+            return [False, f"Second EHLO on port {port} failed."]
+        smtp.close()
+    except Exception as e:  # pylint: disable=broad-except,invalid-name
+        print(str(e))
+        return [False, f"SMTP failure on port {port}."]
+    return [True, f"SMTP on port {port} is OK."]
+
+
+def handler(event, context):  # pylint: disable=unused-argument
+    """Lambda event handler."""
+    for port in [25, 587]:
+        success, message = check_smtp(port)
+        print(message)
+        if not success:
+            publish(message)
+
+
+if __name__ == "__main__":
+    handler("event", "context")
-- 
GitLab