aboutsummaryrefslogtreecommitdiff
path: root/trigger.py
diff options
context:
space:
mode:
Diffstat (limited to 'trigger.py')
-rw-r--r--trigger.py36
1 files changed, 36 insertions, 0 deletions
diff --git a/trigger.py b/trigger.py
new file mode 100644
index 0000000..a7fb66c
--- /dev/null
+++ b/trigger.py
@@ -0,0 +1,36 @@
+import threading
+from typing import Any, Callable
+from wsgiref.simple_server import make_server
+
+import port_for
+from flask import Flask, abort, request
+
+
+class TriggerServerThread(threading.Thread):
+ """Simple Flask server (wrapped as thread) for triggering actions on sesssions."""
+
+ def __init__(self, trigger_method: Callable[[str], Any]):
+ super().__init__()
+ self.port = port_for.select_random()
+
+ app = Flask(__name__)
+
+ @app.route("/", methods=["POST"])
+ def trigger():
+ json = request.json
+ token = json.get("token", "")
+ r = trigger_method(token)
+ if r:
+ return "Successful triggered"
+ else:
+ return abort(403)
+
+ self.srv = make_server("127.0.0.1", self.port, app)
+ self.ctx = app.app_context()
+ self.ctx.push()
+
+ def run(self):
+ self.srv.serve_forever()
+
+ def shutdown(self):
+ self.srv.shutdown()