Add an option to specify a webhook URL for updates in the downloads section
and tweak the help texts for the original source web hook a bit. Also remove the superfluous inline help code from the SourceConf form that was actually not used. This feature was sponsored by Scilab.
This commit is contained in:
parent
dc50e9b316
commit
b29acd71cb
@ -297,7 +297,7 @@ class IDF_Commit extends Pluf_Model
|
||||
'creation_date' => $this->creation_dtime,
|
||||
),
|
||||
'project_id' => $project->id,
|
||||
'authkey' => $project->getPostCommitHookKey(),
|
||||
'authkey' => $project->getWebHookKey(),
|
||||
'url' => $url,
|
||||
);
|
||||
$item = new IDF_Queue();
|
||||
|
@ -49,13 +49,10 @@ class IDF_Form_SourceConf extends Pluf_Form
|
||||
'widget' => 'Pluf_Form_Widget_PasswordInput',
|
||||
));
|
||||
}
|
||||
Pluf::loadFunction('Pluf_HTTP_URL_urlForView');
|
||||
$url = Pluf_HTTP_URL_urlForView('idf_faq').'#webhooks';
|
||||
$this->fields['webhook_url'] = new Pluf_Form_Field_Url(
|
||||
array('required' => false,
|
||||
'label' => __('Webhook URL'),
|
||||
'initial' => $this->conf->getVal('webhook_url', ''),
|
||||
'help_text' => sprintf(__('Learn more about the <a href="%s">post-commit web hooks</a>.'), $url),
|
||||
'widget_attrs' => array('size' => 35),
|
||||
));
|
||||
|
||||
|
@ -60,10 +60,18 @@ Deprecated = Most users should NOT download this';
|
||||
$this->fields['labels_download_one_max'] = new Pluf_Form_Field_Varchar(
|
||||
array('required' => false,
|
||||
'label' => __('Each download may have at most one label with each of these classes'),
|
||||
'initial' => self::init_one_max,
|
||||
'initial' => self::init_one_max,
|
||||
'widget_attrs' => array('size' => 60),
|
||||
));
|
||||
|
||||
$this->conf = $extra['conf'];
|
||||
$this->fields['upload_webhook_url'] = new Pluf_Form_Field_Url(
|
||||
array('required' => false,
|
||||
'label' => __('Webhook URL'),
|
||||
'initial' => $this->conf->getVal('upload_webhook_url', ''),
|
||||
'widget_attrs' => array('size' => 60),
|
||||
));
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -494,12 +494,12 @@ GROUP BY uid";
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the post commit hook key.
|
||||
* Get the web hook key.
|
||||
*
|
||||
* The goal is to get something predictable but from which one
|
||||
* cannot reverse find the secret key.
|
||||
*/
|
||||
public function getPostCommitHookKey()
|
||||
public function getWebHookKey()
|
||||
{
|
||||
return md5($this->id.sha1(Pluf::f('secret_key')).$this->shortname);
|
||||
}
|
||||
|
@ -375,8 +375,11 @@ class IDF_Views_Project
|
||||
$title = sprintf(__('%s Downloads Configuration'), (string) $prj);
|
||||
$conf = new IDF_Conf();
|
||||
$conf->setProject($prj);
|
||||
$extra = array(
|
||||
'conf' => $conf,
|
||||
);
|
||||
if ($request->method == 'POST') {
|
||||
$form = new IDF_Form_UploadConf($request->POST);
|
||||
$form = new IDF_Form_UploadConf($request->POST, $extra);
|
||||
if ($form->isValid()) {
|
||||
foreach ($form->cleaned_data as $key=>$val) {
|
||||
$conf->setVal($key, $val);
|
||||
@ -388,7 +391,7 @@ class IDF_Views_Project
|
||||
}
|
||||
} else {
|
||||
$params = array();
|
||||
$keys = array('labels_download_predefined', 'labels_download_one_max');
|
||||
$keys = array('labels_download_predefined', 'labels_download_one_max', 'upload_webhook_url');
|
||||
foreach ($keys as $key) {
|
||||
$_val = $conf->getVal($key, false);
|
||||
if ($_val !== false) {
|
||||
@ -398,12 +401,13 @@ class IDF_Views_Project
|
||||
if (count($params) == 0) {
|
||||
$params = null; //Nothing in the db, so new form.
|
||||
}
|
||||
$form = new IDF_Form_UploadConf($params);
|
||||
$form = new IDF_Form_UploadConf($params, $extra);
|
||||
}
|
||||
return Pluf_Shortcuts_RenderToResponse('idf/admin/downloads.html',
|
||||
array(
|
||||
'page_title' => $title,
|
||||
'form' => $form,
|
||||
'hookkey' => $prj->getWebHookKey(),
|
||||
),
|
||||
$request);
|
||||
}
|
||||
@ -598,7 +602,7 @@ class IDF_Views_Project
|
||||
'repository_size' => $prj->getRepositorySize(),
|
||||
'page_title' => $title,
|
||||
'form' => $form,
|
||||
'hookkey' => $prj->getPostCommitHookKey(),
|
||||
'hookkey' => $prj->getWebHookKey(),
|
||||
),
|
||||
$request);
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
{extends "idf/admin/base.html"}
|
||||
{block docclass}yui-t1{assign $inDownloads = true}{/block}
|
||||
{block docclass}yui-t3{assign $inDownloads = true}{/block}
|
||||
{block body}
|
||||
<form method="post" action=".">
|
||||
<table class="form" summary="">
|
||||
@ -16,6 +16,15 @@
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{$form.f.upload_webhook_url.labelTag}:<br />
|
||||
{if $form.f.upload_webhook_url.errors}{$form.f.upload_webhook_url.fieldErrors}{/if}
|
||||
{$form.f.upload_webhook_url|unsafe}<br>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{trans 'Web-Hook authentication key:'} {$hookkey}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<input type="submit" value="{trans 'Save Changes'}" name="submit" />
|
||||
</td>
|
||||
@ -31,4 +40,29 @@
|
||||
<p>Optionally, use an equals-sign to document the meaning of each status value.</p>
|
||||
{/blocktrans}
|
||||
</div>
|
||||
<div class="issue-submit-info">
|
||||
|
||||
{blocktrans}<p>The webhook URL setting specifies an URL to which a HTTP <strong>PUT</strong>
|
||||
request is sent after a new download has been added or to which a HTTP <strong>POST</strong>
|
||||
request is sent after an existing download has been updated.
|
||||
If this field is empty, notifications are disabled.</p>
|
||||
|
||||
<p>Only properly-escaped <strong>HTTP</strong> URLs are supported, for example:</p>
|
||||
|
||||
<ul>
|
||||
<li><code>http://domain.com/upload</code></li>
|
||||
<li><code>http://domain.com/upload?my%20param</code></li>
|
||||
</ul>
|
||||
|
||||
<p>In addition, the URL may contain the following "%" notation, which
|
||||
will be replaced with specific project values for each download:</p>
|
||||
|
||||
<ul>
|
||||
<li><code>%p</code> - project name</li>
|
||||
<li><code>%d</code> - download id</li>
|
||||
</ul>
|
||||
|
||||
<p>For example, updating download 123 of project 'my-project' with
|
||||
web hook URL <code>http://mydomain.com/%p/%d</code> would send a POST request to
|
||||
<code>http://mydomain.com/my-project/123</code>.</p>{/blocktrans}</div>
|
||||
{/block}
|
||||
|
@ -42,11 +42,10 @@
|
||||
<th>{$form.f.webhook_url.labelTag}:</th>
|
||||
<td>{if $form.f.webhook_url.errors}{$form.f.webhook_url.fieldErrors}{/if}
|
||||
{$form.f.webhook_url|unsafe}<br>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>{trans 'Post-commit authentication key:'}</th>
|
||||
<th>{trans 'Web-Hook authentication key:'}</th>
|
||||
<td>{$hookkey}
|
||||
</td>
|
||||
</tr>
|
||||
@ -68,26 +67,26 @@
|
||||
<br>
|
||||
<div class="issue-submit-info">
|
||||
|
||||
{blocktrans}<p>The webhook URL setting specifies a URL to which a HTTP POST
|
||||
{blocktrans}<p>The webhook URL setting specifies an URL to which a HTTP POST
|
||||
request is sent after each repository commit. If this field is empty,
|
||||
notifications are disabled.</p>
|
||||
|
||||
<p>Only properly-escaped <strong>HTTP</strong> URLs are supported, for example:</p>
|
||||
|
||||
<ul>
|
||||
<li>http://domain.com/commit</li>
|
||||
<li>http://domain.com/commit?my%20param</li>
|
||||
<li><code>http://domain.com/commit</code></li>
|
||||
<li><code>http://domain.com/commit?my%20param</code></li>
|
||||
</ul>
|
||||
|
||||
<p>In addition, the URL may contain the following "%" notation, which
|
||||
will be replaced with specific project values for each commit:</p>
|
||||
|
||||
<ul>
|
||||
<li>%p - project name</li>
|
||||
<li>%r - revision number</li>
|
||||
<li><code>%p</code> - project name</li>
|
||||
<li><code>%r</code> - revision number</li>
|
||||
</ul>
|
||||
|
||||
<p>For example, committing revision 123 to project 'my-project' with
|
||||
post-commit URL http://mydomain.com/%p/%r would send a request to
|
||||
http://mydomain.com/my-project/123.</p>{/blocktrans}</div>
|
||||
post-commit URL <code>http://mydomain.com/%p/%r</code> would send a request to
|
||||
<code>http://mydomain.com/my-project/123</code>.</p>{/blocktrans}</div>
|
||||
{/block}
|
||||
|
Loading…
Reference in New Issue
Block a user