hub.sr.ht/hubsrht/blueprints/webhooks.py

73 lines
2.7 KiB
Python
Raw Normal View History

2020-03-31 17:17:19 +02:00
import json
from flask import Blueprint, request
from hubsrht.types import MailingList, SourceRepo, RepoType
from srht.database import db
from srht.flask import csrf_bypass
2020-03-24 15:26:15 +01:00
webhooks = Blueprint("webhooks", __name__)
2020-03-31 17:17:19 +02:00
@csrf_bypass
@webhooks.route("/webhooks/git-repo", methods=["POST"])
2020-03-31 22:09:33 +02:00
def git_repo():
2020-03-31 17:17:19 +02:00
event = request.headers.get("X-Webhook-Event")
payload = json.loads(request.data.decode("utf-8"))
if event == "repo:update":
repo = (SourceRepo.query
.filter(SourceRepo.remote_id == payload["id"])
.filter(SourceRepo.repo_type == RepoType.git)
.one_or_none())
if not repo:
return "I don't recognize that repository.", 404
repo.name = payload["name"]
repo.description = payload["description"]
db.session.commit()
return f"Updated local:{repo.id}/remote:{repo.remote_id}. Thanks!", 200
elif event == "repo:delete":
raise NotImplementedError()
2020-03-31 22:09:33 +02:00
elif event == "repo:post-update":
raise NotImplementedError()
2020-03-25 15:08:29 +01:00
2020-03-31 17:17:19 +02:00
@csrf_bypass
@webhooks.route("/webhooks/mailing-list", methods=["POST"])
2020-03-31 22:09:33 +02:00
def mailing_list():
2020-03-31 17:17:19 +02:00
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:
return "I don't recognize that mailing list.", 404
ml.name = payload["name"]
ml.description = payload["description"]
db.session.commit()
return f"Updated local:{ml.id}/remote:{ml.remote_id}. Thanks!", 200
elif event == "list:delete":
raise NotImplementedError()
2020-03-31 22:09:33 +02:00
elif event == "post:received":
raise NotImplementedError()
elif event == "patchset:received":
raise NotImplementedError()
2020-04-02 15:24:29 +02:00
@csrf_bypass
@webhooks.route("/webhooks/tracker", methods=["POST"])
def tracker():
event = request.headers.get("X-Webhook-Event")
payload = json.loads(request.data.decode("utf-8"))
if event == "tracker:update":
2020-04-02 16:13:01 +02:00
tracker = (Tracker.query
.filter(Tracker.remote_id == payload["id"])
.one_or_none())
if not tracker:
return "I don't recognize this tracker.", 404
tracker.name = payload["name"]
tracker.description = payload["description"]
db.session.commit()
return f"Updated local:{tracker.id}/remote:{tracker.remote_id}. Thanks!", 200
2020-04-02 15:24:29 +02:00
elif event == "tracker:delete":
raise NotImplementedError()
elif event == "ticket:create":
raise NotImplementedError()
else:
raise NotImplementedError()