mirror of https://git.sr.ht/~sircmpwn/hub.sr.ht
Flesh out webhooks a bit more
This commit is contained in:
parent
88af4176a7
commit
a005c28fdf
|
@ -11,7 +11,6 @@ from srht.oauth import current_user, loginrequired
|
|||
from srht.validation import Validation
|
||||
|
||||
projects = Blueprint("projects", __name__)
|
||||
origin = get_origin("hub.sr.ht")
|
||||
|
||||
@projects.route("/<owner>/<project_name>")
|
||||
def summary_GET(owner, project_name):
|
||||
|
@ -162,11 +161,8 @@ def sources_git_new_POST(owner, project_name):
|
|||
event.user_id = project.owner_id
|
||||
db.session.add(event)
|
||||
|
||||
# TODO: repo webhooks for rigging up commit events
|
||||
git.ensure_user_webhooks(owner, {
|
||||
origin + url_for("webhooks.git_repo_update"):
|
||||
["repo:update", "repo:delete"],
|
||||
})
|
||||
git.ensure_user_webhooks(owner)
|
||||
git.ensure_repo_webhooks(owner, repo.name)
|
||||
|
||||
db.session.commit()
|
||||
|
||||
|
@ -258,11 +254,7 @@ def mailing_lists_new_POST(owner, project_name):
|
|||
event.user_id = project.owner_id
|
||||
db.session.add(event)
|
||||
|
||||
# TODO: lists webhooks for rigging up new mail events
|
||||
lists.ensure_mailing_list_webhooks(owner, ml.name, {
|
||||
origin + url_for("webhooks.mailing_list_update"):
|
||||
["list:update", "list:delete"],
|
||||
})
|
||||
lists.ensure_mailing_list_webhooks(owner, ml.name)
|
||||
|
||||
db.session.commit()
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@ webhooks = Blueprint("webhooks", __name__)
|
|||
|
||||
@csrf_bypass
|
||||
@webhooks.route("/webhooks/git-repo", methods=["POST"])
|
||||
def git_repo_update():
|
||||
def git_repo():
|
||||
event = request.headers.get("X-Webhook-Event")
|
||||
payload = json.loads(request.data.decode("utf-8"))
|
||||
if event == "repo:update":
|
||||
|
@ -24,10 +24,12 @@ def git_repo_update():
|
|||
return f"Updated local:{repo.id}/remote:{repo.remote_id}. Thanks!", 200
|
||||
elif event == "repo:delete":
|
||||
raise NotImplementedError()
|
||||
elif event == "repo:post-update":
|
||||
raise NotImplementedError()
|
||||
|
||||
@csrf_bypass
|
||||
@webhooks.route("/webhooks/mailing-list", methods=["POST"])
|
||||
def mailing_list_update():
|
||||
def mailing_list():
|
||||
event = request.headers.get("X-Webhook-Event")
|
||||
payload = json.loads(request.data.decode("utf-8"))
|
||||
if event == "list:update":
|
||||
|
@ -42,3 +44,7 @@ def mailing_list_update():
|
|||
return f"Updated local:{ml.id}/remote:{ml.remote_id}. Thanks!", 200
|
||||
elif event == "list:delete":
|
||||
raise NotImplementedError()
|
||||
elif event == "post:received":
|
||||
raise NotImplementedError()
|
||||
elif event == "patchset:received":
|
||||
raise NotImplementedError()
|
||||
|
|
|
@ -1,10 +1,12 @@
|
|||
import requests
|
||||
from abc import ABC
|
||||
from flask import url_for
|
||||
from srht.api import ensure_webhooks, get_authorization, get_results
|
||||
from srht.config import get_origin
|
||||
|
||||
_gitsrht = get_origin("git.sr.ht", external=True, default=None)
|
||||
_listsrht = get_origin("lists.sr.ht", external=True, default=None)
|
||||
origin = get_origin("hub.sr.ht")
|
||||
|
||||
class SrhtService(ABC):
|
||||
def __init__(self):
|
||||
|
@ -58,9 +60,20 @@ class GitService(SrhtService):
|
|||
"visibility": "public", # TODO: Should this be different?
|
||||
})
|
||||
|
||||
def ensure_user_webhooks(self, user, config):
|
||||
def ensure_user_webhooks(self, user):
|
||||
config = {
|
||||
origin + url_for("webhooks.git_repo"):
|
||||
["repo:update", "repo:delete"],
|
||||
}
|
||||
ensure_webhooks(user, f"{_gitsrht}/api/user/webhooks", config)
|
||||
|
||||
def ensure_repo_webhooks(self, user, repo_name):
|
||||
config = {
|
||||
origin + url_for("webhooks.git_repo"): ["repo:post-update"],
|
||||
}
|
||||
url = f"{_gitsrht}/api/{user.canonical_name}/repos/{repo_name}/webhooks"
|
||||
ensure_webhooks(user, url, config)
|
||||
|
||||
class ListService(SrhtService):
|
||||
def get_lists(self, user):
|
||||
return get_results(f"{_listsrht}/api/lists", user)
|
||||
|
@ -72,7 +85,11 @@ class ListService(SrhtService):
|
|||
raise Exception(r.json())
|
||||
return r.json()
|
||||
|
||||
def ensure_mailing_list_webhooks(self, user, list_name, config):
|
||||
def ensure_mailing_list_webhooks(self, user, list_name):
|
||||
config = {
|
||||
origin + url_for("webhooks.mailing_list"):
|
||||
["list:update", "list:delete", "post:received", "patchset:received"],
|
||||
}
|
||||
url = f"{_listsrht}/api/user/{user.canonical_name}/lists/{list_name}/webhooks"
|
||||
ensure_webhooks(user, url, config)
|
||||
|
||||
|
|
Loading…
Reference in New Issue