diff --git a/pagure/templates/admin_index.html b/pagure/templates/admin_index.html
index 6ccf0c3..4b341e6 100644
--- a/pagure/templates/admin_index.html
+++ b/pagure/templates/admin_index.html
@@ -23,6 +23,19 @@
{{ form.csrf_token }}
+
+
+
+ This action can be used in case you need to change the hook-token for
+ *all* the projects hosted on this pagure instance. This can be due to
+ security reason. Beware that using it will break every web-hook
+ consumer of every project hosted.
+
+
{% if config['PAGURE_AUTH'] == 'local' %}
diff --git a/pagure/ui/admin.py b/pagure/ui/admin.py
index a26f36b..beaba6d 100644
--- a/pagure/ui/admin.py
+++ b/pagure/ui/admin.py
@@ -13,7 +13,7 @@ from functools import wraps
import flask
import pagure.forms
-from pagure import (APP,
+from pagure import (APP, SESSION,
generate_gitolite_acls, generate_authorized_key_file,
is_admin, admin_session_timedout)
@@ -72,3 +72,14 @@ def admin_refresh_ssh():
generate_authorized_key_file()
flask.flash('Authorized file updated')
return flask.redirect(flask.url_for('admin_index'))
+
+
+@APP.route('/admin/hook_token', methods=['POST'])
+@admin_required
+def admin_generate_hook_token():
+ """ Regenerate the hook_token for each projects in the DB. """
+ form = pagure.forms.ConfirmationForm()
+ if form.validate_on_submit():
+ pagure.lib.generate_hook_token(SESSION)
+ flask.flash('Hook token all re-generated')
+ return flask.redirect(flask.url_for('admin_index'))