From e1b6ea0cbee222839185cdb608bc729c970dd1ec Mon Sep 17 00:00:00 2001 From: grunfink Date: Fri, 30 May 2025 19:03:49 +0200 Subject: auto_follower_webhook.py new example program. --- examples/auto_follower_webhook.py | 55 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100755 examples/auto_follower_webhook.py (limited to 'examples/auto_follower_webhook.py') diff --git a/examples/auto_follower_webhook.py b/examples/auto_follower_webhook.py new file mode 100755 index 0000000..e1192c1 --- /dev/null +++ b/examples/auto_follower_webhook.py @@ -0,0 +1,55 @@ +#!/usr/bin/env python3 + +# This is an example of a snac webhook that automatically follows all new followers. + +# To use it, set the variables snac_basedir and snac_user to something reasonable, +# configure the user webhook to be http://localhost:12345, and run this program. + +# copyright (C) 2025 grunfink et al. / MIT license + +from http.server import BaseHTTPRequestHandler, HTTPServer +import time +import json +import os + +host_name = "localhost" +server_port = 12345 +snac_basedir = "/var/snac/example_instance" +snac_user = "example_user" + +class SnacAutoResponderServer(BaseHTTPRequestHandler): + + def do_POST(self): + self.send_response(200) + self.end_headers() + + content_type = self.headers["content-type"] + content_length = int(self.headers["content-length"]) + payload = self.rfile.read(content_length).decode("utf-8") + + if content_type == "application/json": + try: + noti = json.loads(payload) + + type = noti["type"] + + if type == "Follow": + actor = noti["actor"] + cmd = "snac follow %s %s %s" % (snac_basedir, snac_user, actor) + + os.system(cmd) + + except: + print("Error parsing notification") + +if __name__ == "__main__": + webServer = HTTPServer((host_name, server_port), SnacAutoResponderServer) + print("Webhook started http://%s:%s" % (host_name, server_port)) + + try: + webServer.serve_forever() + except KeyboardInterrupt: + pass + + webServer.server_close() + print("Webhook stopped.") -- cgit v1.2.3