From bc4639a055ad233069f7e418b4651d9a12b5eaa8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9ophile=20Bastian?= Date: Tue, 22 Mar 2022 14:15:39 +0100 Subject: [PATCH] Add base boilerplate --- requirements.txt | 2 ++ signal_webhook/app.py | 27 +++++++++++++++++++++++++++ signal_webhook/signal.py | 18 ++++++++++++++++++ 3 files changed, 47 insertions(+) create mode 100644 requirements.txt create mode 100644 signal_webhook/app.py create mode 100644 signal_webhook/signal.py 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)