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_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
|
||||
import os
|
||||
import smtplib
|
||||
import ssl
|
||||
from email.message import EmailMessage
|
||||
|
||||
from flask import Flask, jsonify
|
||||
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("/")
|
||||
def index():
|
||||
return jsonify({
|
||||
@@ -69,6 +88,16 @@ def check():
|
||||
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")
|
||||
def mariadb():
|
||||
return jsonify(mariadb_configuration())
|
||||
|
||||
Reference in New Issue
Block a user