From 49ff66fb31a3583d5a6191276444982115f080e8 Mon Sep 17 00:00:00 2001 From: Yannik Schmidt Date: Sat, 15 Jul 2023 14:01:33 +0200 Subject: [PATCH] wip: finalize dispatch poller --- signal-query-dispatch.py | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/signal-query-dispatch.py b/signal-query-dispatch.py index 36373c8..f5f92b9 100755 --- a/signal-query-dispatch.py +++ b/signal-query-dispatch.py @@ -1,38 +1,44 @@ #!/usr/bin/python3 import argparse +import sys import flask import subprocess import os import requests from functools import wraps -signal_cli_bin = "signal-cli" +HTTP_NOT_FOUND = 404 def signal_send(user, message): - - cmd = [signal_send, "send", "-m", message, user] + '''Send message via signal''' + cmd = [signal_cli_bin, "send", "-m", message, user] p = subprocess.run(cmd) - p.wait() - def confirm_dispatch(target, uid): - response = requests.post(target, json=[{ "uid" : uid }]) + '''Confirm to server that message has been dispatched and can be removed''' + response = requests.post(target + "/confirm-dispatch", json=[{ "uid" : uid }]) + + if response.status_code not in [200, 204]: + print("Failed to confirm disptach with server for {} ({})".format(uid, response.text), file=sys.stderr) if __name__ == "__main__": + # set signal cli from env # signal_cli_bin = os.environ["SIGNAL_CLI_BIN"] parser = argparse.ArgumentParser(description='Query Atlantis Dispatch for Signal', formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser.add_argument('--target', required=True) + parser.add_argument('--method', default="signal") + parser.add_argument('--no-confirm', action="store_true") args = parser.parse_args() - response = requests.get(args.target) - HTTP_NOT_FOUND = 404 + + response = requests.get(args.target + "/get-dispatch?method={}".format(args.method)) # check status # if response.status_code == HTTP_NOT_FOUND: @@ -44,11 +50,16 @@ if __name__ == "__main__": user = entry["person"] message = entry["message"] + uid = entry["uid"] # send message # - signal_send(user, message) + if entry["method"] == "signal": + signal_send(user, message) + else: + print("Unsupported dispatch method {}".format(entry["method"]), sys=sys.stderr) # confirm dispatch - confirm_dispatch(uid) + if not args.no_confirm: + confirm_dispatch(args.target, uid) sys.exit(0)