From 8c8487e52b2a1da8eb08e48098f4ae617d028ef1 Mon Sep 17 00:00:00 2001
From: Pierre-Yves Chibon
Date: Feb 08 2017 10:20:24 +0000
Subject: Add a button to test web-hook notifications
Fixes https://pagure.io/pagure/issue/1780
---
diff --git a/pagure/templates/settings.html b/pagure/templates/settings.html
index a0a90c3..3d4fd97 100644
--- a/pagure/templates/settings.html
+++ b/pagure/templates/settings.html
@@ -248,6 +248,17 @@
{{ form.csrf_token }}
+
+ {% if config.get('WEBHOOK') and repo.settings['Web-hooks'] %}
+
+ {% endif %}
diff --git a/pagure/ui/repo.py b/pagure/ui/repo.py
index 9684ce7..ec0efce 100644
--- a/pagure/ui/repo.py
+++ b/pagure/ui/repo.py
@@ -17,6 +17,7 @@
import datetime
+import json
import shutil
import os
from math import ceil
@@ -1090,6 +1091,54 @@ def view_settings(repo, username=None, namespace=None):
)
+@APP.route('//settings/test_hook', methods=('GET', 'POST'))
+@APP.route('///settings/test_hook', methods=('GET', 'POST'))
+@APP.route('/fork///settings/test_hook', methods=('GET', 'POST'))
+@APP.route(
+ '/fork////settings/test_hook',
+ methods=('GET', 'POST'))
+@login_required
+def test_web_hook(repo, username=None, namespace=None):
+ """ Presents the settings of the project.
+ """
+ if admin_session_timedout():
+ if flask.request.method == 'POST':
+ flask.flash('Action canceled, try it again', 'error')
+ return flask.redirect(
+ flask.url_for('auth_login', next=flask.request.url))
+
+ repo = flask.g.repo
+ repo_obj = flask.g.repo_obj
+
+ if not flask.g.repo_admin:
+ flask.abort(
+ 403,
+ 'You are not allowed to trigger a test notification for this '
+ 'project')
+
+ form = pagure.forms.ConfirmationForm()
+ if form.validate_on_submit():
+ if pagure.lib.REDIS:
+ pagure.lib.REDIS.publish(
+ 'pagure.hook',
+ json.dumps({
+ 'project': repo.fullname,
+ 'topic': 'Test.notification',
+ 'msg': {'content': 'Test message'},
+ })
+ )
+ flask.flash('Notification triggered')
+ else:
+ flask.flash(
+ 'Notification could not be sent as the web-hook server could '
+ 'not be contacted'
+ )
+
+ return flask.redirect(flask.url_for(
+ 'view_settings', username=username, repo=repo.name,
+ namespace=repo.namespace))
+
+
@APP.route('//update', methods=['POST'])
@APP.route('///update', methods=['POST'])
@APP.route('/fork///update', methods=['POST'])