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'] %} +
+ {{ form.csrf_token }} + +
+ {% 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'])