diff --git a/hubsrht/blueprints/webhooks.py b/hubsrht/blueprints/webhooks.py index a92a317..af8295d 100644 --- a/hubsrht/blueprints/webhooks.py +++ b/hubsrht/blueprints/webhooks.py @@ -1,13 +1,19 @@ import json from datetime import datetime -from flask import Blueprint, request +from flask import Blueprint, request, current_app from hubsrht.types import Event, EventType, MailingList, SourceRepo, RepoType from hubsrht.types import Tracker, User +from srht.config import get_origin from srht.database import db from srht.flask import csrf_bypass webhooks = Blueprint("webhooks", __name__) +_gitsrht = get_origin("git.sr.ht", external=True, default=None) +_hgsrht = get_origin("hg.sr.ht", external=True, default=None) +_todosrht = get_origin("todo.sr.ht", external=True, default=None) +_listssrht = get_origin("lists.sr.ht", external=True, default=None) + @csrf_bypass @webhooks.route("/webhooks/git-user/", methods=["POST"]) def git_user(user_id): @@ -54,7 +60,36 @@ def git_repo(repo_id): return "I don't recognize that repository.", 404 if event == "repo:post-update": - raise NotImplementedError() + # XXX: This isn't right for Hg, but Hg doesn't have webhooks yet anyway + commit_sha = payload["refs"][0]["new"]["id"][:7] + commit_url = repo.url() + f"/commit/{commit_sha}" + commit_message = payload["refs"][0]["new"]["message"].split("\n")[0] + pusher_name = payload['pusher']['canonical_name'] + if repo.repo_type == RepoType.git: + pusher_url = f"{_gitsrht}/{pusher_name}" + elif repo.repo_type == RepoType.hg: + pusher_url = f"{_hgsrht}/{pusher_name}" + repo_name = repo.owner.canonical_name + "/" + repo.name + + pusher = current_app.oauth_service.lookup_user(payload['pusher']['name']) + + event = Event() + event.event_type = EventType.external_event + event.source_repo_id = repo.id + event.project_id = repo.project_id + event.user_id = pusher.id + + event.external_source = "git.sr.ht" + event.external_summary = ( + f"{commit_sha} " + + f"{commit_message}") + event.external_details = ( + f"{pusher_name} pushed to " + + f"{repo_name} git") + + db.session.add(event) + db.session.commit() + return "Thanks!" else: raise NotImplementedError() diff --git a/hubsrht/templates/event.html b/hubsrht/templates/event.html index ddf48c5..77100f3 100644 --- a/hubsrht/templates/event.html +++ b/hubsrht/templates/event.html @@ -23,6 +23,12 @@

New ticket tracker added

{{event.created | date}} +{% elif event.event_type == EventType.external_event %} +
+ {{event.external_summary | md}} + {{event.external_details | md}} + {{event.created | date}} +
{% else %} TODO: implement event type {{event.event_type}} {% endif %} diff --git a/scss/main.scss b/scss/main.scss index 43c7b5e..27291f4 100644 --- a/scss/main.scss +++ b/scss/main.scss @@ -42,6 +42,10 @@ margin-bottom: 0; } + code { + font-size: 0.95rem; + } + p { margin-bottom: 0; }