diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..94f992c --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +Flask +pydbus diff --git a/signal_webhook/app.py b/signal_webhook/app.py new file mode 100644 index 0000000..ffcf84e --- /dev/null +++ b/signal_webhook/app.py @@ -0,0 +1,27 @@ +import typing as t +from flask import Flask, request +from . import signal + +app = Flask(__name__) + + +@app.route("/") +def root() -> t.Tuple[str, int]: + return "Not supported.", 400 + + +@app.route("/alertmanager", methods=["POST"]) +def alertmanager(): + data = request.get_json(cache=False) + if "version" not in data or int(data["version"]) != 4: + return "Bad API version", 400 + if "alerts" not in data: + return "No alerts", 400 + if "status" not in data: + return "No status", 400 + if data["status"] != "firing": + # Ignore + return "OK", 200 + + for alert in data["alerts"]: + ... diff --git a/signal_webhook/signal.py b/signal_webhook/signal.py new file mode 100644 index 0000000..636b5df --- /dev/null +++ b/signal_webhook/signal.py @@ -0,0 +1,18 @@ +import logging +from pydbus import SystemBus +from gi.repository.GLib import GError + +logger = logging.getLogger(__name__) + + +def signal_send(recipient, message): + try: + bus = SystemBus() + signal_bus = bus.get("org.asamk.Signal") + signal_bus.sendMessage( + message, + [], + [recipient], + ) + except GError as exn: + logger.error("Cannot send Signal notification: %s", exn)