From 55ca2359467cdb7a005455667ae0b89d368311da Mon Sep 17 00:00:00 2001 From: rasmus Date: Thu, 7 Aug 2025 20:44:23 +0300 Subject: [PATCH] tiny refactor /longpoltiny and /longpolll --- app/doorboy-proxy.py | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/app/doorboy-proxy.py b/app/doorboy-proxy.py index d13c274..91b6de6 100755 --- a/app/doorboy-proxy.py +++ b/app/doorboy-proxy.py @@ -11,13 +11,13 @@ import os app = Sanic(__name__) monitor(app).expose_endpoint() -INVENTORY_API_KEY = os.environ["INVENTORY_API_KEY"] -DOORBOY_SECRET_FLOOR = os.environ["DOORBOY_SECRET_FLOOR"] -DOORBOY_SECRET_WORKSHOP = os.environ["DOORBOY_SECRET_WORKSHOP"] -CARD_URI = os.environ["CARD_URI"] +DOORBOY_SECRET_FLOOR = os.environ["DOORBOY_SECRET_FLOOR"] # API key for godoor controllers authenticating for k-space:floor +DOORBOY_SECRET_WORKSHOP = os.environ["DOORBOY_SECRET_WORKSHOP"] # API key for godoor controllers authenticating for k-space:workshop FLOOR_ACCESS_GROUP = os.environ["FLOOR_ACCESS_GROUP"] WORKSHOP_ACCESS_GROUP = os.environ["WORKSHOP_ACCESS_GROUP"] MONGO_URI = os.environ["MONGO_URI"] +INVENTORY_API_KEY = os.environ["INVENTORY_API_KEY"] # asshole forwards to inventory-app, instead of using mongo directly +CARD_URI = os.environ["CARD_URI"] SWIPE_URI = os.environ["SWIPE_URI"] assert len(DOORBOY_SECRET_FLOOR) >= 10 @@ -70,10 +70,7 @@ async def view_open_door_events(request): results = await app.ctx.db.eventlog.find({ "component": "doorboy", "type": "open-door", - "$or": [ - { "approved": True }, - { "success": True }, - ], + "approved": True, "$or": [ { "type": "open-door" }, { "event": "card-swiped" }, @@ -106,7 +103,8 @@ async def view_longpoll(request): key = request.headers.get("KEY") if not key or key not in [DOORBOY_SECRET_FLOOR, DOORBOY_SECRET_WORKSHOP]: return text("Invalid token") - + + # authenticate response = await request.respond(content_type="text/event-stream") await response.send("data: response-generator-started\n\n") pipeline = [ @@ -120,19 +118,26 @@ async def view_longpoll(request): async with app.ctx.db.eventlog.watch(pipeline) as stream: await response.send("data: watch-stream-opened\n\n") async for event in stream: - if event["fullDocument"].get("type") == "open-door" and event["fullDocument"].get("approved", False): - await response.send("data: %s\n\n" % - event["fullDocument"]["door"]) - except pymongo.errors.PyMongoError as e: + ev = event["fullDocument"] + if ev["approved"] != "true": + continue + if ev["type"] == "token": + continue + + response.send("data: %s\n\n" % ev["door"]) + except PyMongoError as e: print(e) await response.send("data: response-generator-ended\n\n") return @app.post("/swipe") async def forward_swipe(request): + # authenticate key = request.headers.get("KEY") if not key or key not in [DOORBOY_SECRET_FLOOR, DOORBOY_SECRET_WORKSHOP]: return text("Invalid token", status=401) + + # authorize data = request.json doors = set() if key == DOORBOY_SECRET_FLOOR: