Add SMTP whitelist alerts
This commit is contained in:
@@ -122,3 +122,15 @@ Found. Redirecting to /v2/login
|
|||||||
WHITELIST_URL=https://whitelist.nodejsk8s.services.ngcloud.ru/v2/app
|
WHITELIST_URL=https://whitelist.nodejsk8s.services.ngcloud.ru/v2/app
|
||||||
WHITELIST_TIMEOUT=10
|
WHITELIST_TIMEOUT=10
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## SMTP-алерты
|
||||||
|
|
||||||
|
После включения IMAP в настройках Яндекс Почты SMTP-аутентификация успешно прошла для адресов аккаунта через `smtp.yandex.ru:465` с SSL.
|
||||||
|
|
||||||
|
В KUMA добавлен `POST /alert`: он получает ответ whitelist и отправляет его по SMTP на `SMTP_TO`. Пароль SMTP хранится только в `.env`.
|
||||||
|
|
||||||
|
Добавлена переменная:
|
||||||
|
|
||||||
|
```text
|
||||||
|
SMTP_TO=tazet@narod.ru
|
||||||
|
```
|
||||||
|
|||||||
+29
@@ -1,5 +1,8 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
import os
|
import os
|
||||||
|
import smtplib
|
||||||
|
import ssl
|
||||||
|
from email.message import EmailMessage
|
||||||
|
|
||||||
from flask import Flask, jsonify
|
from flask import Flask, jsonify
|
||||||
import requests
|
import requests
|
||||||
@@ -44,6 +47,22 @@ def check_whitelist():
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def send_alert(subject, body):
|
||||||
|
message = EmailMessage()
|
||||||
|
message["Subject"] = subject
|
||||||
|
message["From"] = os.environ["SMTP_FROM"]
|
||||||
|
message["To"] = os.environ["SMTP_TO"]
|
||||||
|
message.set_content(body)
|
||||||
|
with smtplib.SMTP_SSL(
|
||||||
|
os.getenv("SMTP_HOST", "smtp.yandex.ru"),
|
||||||
|
int(os.getenv("SMTP_PORT", "465")),
|
||||||
|
context=ssl.create_default_context(),
|
||||||
|
timeout=10,
|
||||||
|
) as smtp:
|
||||||
|
smtp.login(os.environ["SMTP_USER"], os.environ["SMTP_PASSWORD"])
|
||||||
|
smtp.send_message(message)
|
||||||
|
|
||||||
|
|
||||||
@app.get("/")
|
@app.get("/")
|
||||||
def index():
|
def index():
|
||||||
return jsonify({
|
return jsonify({
|
||||||
@@ -69,6 +88,16 @@ def check():
|
|||||||
return jsonify({"ok": False, "url": WHITELIST_URL, "error": str(exc)}), 502
|
return jsonify({"ok": False, "url": WHITELIST_URL, "error": str(exc)}), 502
|
||||||
|
|
||||||
|
|
||||||
|
@app.post("/alert")
|
||||||
|
def alert():
|
||||||
|
payload = requests.get(WHITELIST_URL, timeout=10).text
|
||||||
|
try:
|
||||||
|
send_alert("KUMA whitelist alert", payload)
|
||||||
|
return jsonify({"ok": True, "sent": True})
|
||||||
|
except (KeyError, OSError, smtplib.SMTPException) as exc:
|
||||||
|
return jsonify({"ok": False, "sent": False, "error": str(exc)}), 502
|
||||||
|
|
||||||
|
|
||||||
@app.get("/mariadb")
|
@app.get("/mariadb")
|
||||||
def mariadb():
|
def mariadb():
|
||||||
return jsonify(mariadb_configuration())
|
return jsonify(mariadb_configuration())
|
||||||
|
|||||||
Reference in New Issue
Block a user