From 15a3556c64152bf76440f94f043570da6d9a6a7f Mon Sep 17 00:00:00 2001 From: Drew DeVault Date: Thu, 23 Apr 2020 13:52:03 -0400 Subject: [PATCH] Rig up mailing list webhooks --- hubsrht/blueprints/mailing_lists.py | 2 ++ hubsrht/blueprints/webhooks.py | 46 +++++++++++++++++++++++------ 2 files changed, 39 insertions(+), 9 deletions(-) diff --git a/hubsrht/blueprints/mailing_lists.py b/hubsrht/blueprints/mailing_lists.py index 22d5aeb..33ccc8f 100644 --- a/hubsrht/blueprints/mailing_lists.py +++ b/hubsrht/blueprints/mailing_lists.py @@ -228,6 +228,8 @@ def delete_POST(owner, project_name, list_id): .filter(MailingList.project_id == project.id)).one_or_none() if not mailing_list: abort(404) + + lists.unensure_mailing_list_webhooks(mailing_list) db.session.delete(mailing_list) valid = Validation(request) diff --git a/hubsrht/blueprints/webhooks.py b/hubsrht/blueprints/webhooks.py index 148b1c8..1ac4e63 100644 --- a/hubsrht/blueprints/webhooks.py +++ b/hubsrht/blueprints/webhooks.py @@ -1,3 +1,4 @@ +import email import json from datetime import datetime from flask import Blueprint, request, current_app @@ -7,6 +8,7 @@ from hubsrht.services import todo from srht.config import get_origin from srht.database import db from srht.flask import csrf_bypass +from urllib.parse import quote webhooks = Blueprint("webhooks", __name__) @@ -127,16 +129,14 @@ def hg_user(user_id): raise NotImplementedError() @csrf_bypass -@webhooks.route("/webhooks/mailing-list", methods=["POST"]) -def mailing_list(): +@webhooks.route("/webhooks/mailing-list/", methods=["POST"]) +def mailing_list(list_id): event = request.headers.get("X-Webhook-Event") payload = json.loads(request.data.decode("utf-8")) - if event == "list:update": - ml = (MailingList.query - .filter(MailingList.remote_id == payload["id"]) - .one_or_none()) - if not ml: + ml = MailingList.query.get(list_id) + if not ml: return "I don't recognize that mailing list.", 404 + if event == "list:update": ml.name = payload["name"] ml.description = payload["description"] ml.project.updated = datetime.utcnow() @@ -145,9 +145,37 @@ def mailing_list(): elif event == "list:delete": raise NotImplementedError() elif event == "post:received": - raise NotImplementedError() + event = Event() + print(payload) + sender = payload["sender"] + if sender: + sender = current_app.oauth_service.lookup_user(sender['name']) + event.user_id = sender.id + sender_url = f"{subject}") + event.external_details = ( + f"{sender_url} via {ml.name}") + + db.session.add(event) + db.session.commit() + return "Thanks!" elif event == "patchset:received": - raise NotImplementedError() + pass # TODO? else: raise NotImplementedError()