wip: finalize dispatch poller

This commit is contained in:
2023-07-15 14:01:33 +02:00
parent 35d21af6f6
commit 49ff66fb31

View File

@@ -1,38 +1,44 @@
#!/usr/bin/python3 #!/usr/bin/python3
import argparse import argparse
import sys
import flask import flask
import subprocess import subprocess
import os import os
import requests import requests
from functools import wraps from functools import wraps
signal_cli_bin = "signal-cli" HTTP_NOT_FOUND = 404
def signal_send(user, message): def signal_send(user, message):
'''Send message via signal'''
cmd = [signal_send, "send", "-m", message, user] cmd = [signal_cli_bin, "send", "-m", message, user]
p = subprocess.run(cmd) p = subprocess.run(cmd)
p.wait()
def confirm_dispatch(target, uid): 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__": if __name__ == "__main__":
# set signal cli from env #
signal_cli_bin = os.environ["SIGNAL_CLI_BIN"] signal_cli_bin = os.environ["SIGNAL_CLI_BIN"]
parser = argparse.ArgumentParser(description='Query Atlantis Dispatch for Signal', parser = argparse.ArgumentParser(description='Query Atlantis Dispatch for Signal',
formatter_class=argparse.ArgumentDefaultsHelpFormatter) formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument('--target', required=True) parser.add_argument('--target', required=True)
parser.add_argument('--method', default="signal")
parser.add_argument('--no-confirm', action="store_true")
args = parser.parse_args() 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 # # check status #
if response.status_code == HTTP_NOT_FOUND: if response.status_code == HTTP_NOT_FOUND:
@@ -44,11 +50,16 @@ if __name__ == "__main__":
user = entry["person"] user = entry["person"]
message = entry["message"] message = entry["message"]
uid = entry["uid"]
# send message # # 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
confirm_dispatch(uid) if not args.no_confirm:
confirm_dispatch(args.target, uid)
sys.exit(0) sys.exit(0)