Call the configured download webhook when new downloads are created
or existing downloads are updated. This feature is sponsored by Scilab.
This commit is contained in:
parent
b29acd71cb
commit
7ff298af79
@ -299,6 +299,7 @@ class IDF_Commit extends Pluf_Model
|
|||||||
'project_id' => $project->id,
|
'project_id' => $project->id,
|
||||||
'authkey' => $project->getWebHookKey(),
|
'authkey' => $project->getWebHookKey(),
|
||||||
'url' => $url,
|
'url' => $url,
|
||||||
|
'method' => 'POST',
|
||||||
);
|
);
|
||||||
$item = new IDF_Queue();
|
$item = new IDF_Queue();
|
||||||
$item->type = 'new_commit';
|
$item->type = 'new_commit';
|
||||||
|
@ -146,6 +146,9 @@ class IDF_Form_UpdateUpload extends Pluf_Form
|
|||||||
$this->upload->modif_dtime = gmdate('Y-m-d H:i:s');
|
$this->upload->modif_dtime = gmdate('Y-m-d H:i:s');
|
||||||
$this->upload->update();
|
$this->upload->update();
|
||||||
$this->upload->batchAssoc('IDF_Tag', $tags);
|
$this->upload->batchAssoc('IDF_Tag', $tags);
|
||||||
|
|
||||||
|
// Send the notification
|
||||||
|
$this->upload->notify($this->project->getConf(), false);
|
||||||
/**
|
/**
|
||||||
* [signal]
|
* [signal]
|
||||||
*
|
*
|
||||||
|
@ -234,6 +234,45 @@ class IDF_Upload extends Pluf_Model
|
|||||||
*/
|
*/
|
||||||
public function notify($conf, $create=true)
|
public function notify($conf, $create=true)
|
||||||
{
|
{
|
||||||
|
$project = $this->get_project();
|
||||||
|
$url = str_replace(array('%p', '%d'),
|
||||||
|
array($project->shortname, $this->id),
|
||||||
|
$conf->getVal('upload_webhook_url', ''));
|
||||||
|
|
||||||
|
$tags = array();
|
||||||
|
foreach ($this->get_tags_list() as $tag) {
|
||||||
|
$tags[] = $tag->class.':'.$tag->name;
|
||||||
|
}
|
||||||
|
|
||||||
|
$payload = array(
|
||||||
|
'to_send' => array(
|
||||||
|
'project' => $project->shortname,
|
||||||
|
'id' => $this->id,
|
||||||
|
'summary' => $this->summary,
|
||||||
|
'changelog' => $this->changelog,
|
||||||
|
'filename' => $this->file,
|
||||||
|
'filesize' => $this->filesize,
|
||||||
|
'md5sum' => $this->md5,
|
||||||
|
'tags' => $tags,
|
||||||
|
),
|
||||||
|
'project_id' => $project->id,
|
||||||
|
'authkey' => $project->getWebHookKey(),
|
||||||
|
'url' => $url,
|
||||||
|
);
|
||||||
|
|
||||||
|
if ($create === true) {
|
||||||
|
$payload['method'] = 'PUT';
|
||||||
|
$payload['to_send']['creation_date'] = $this->creation_dtime;
|
||||||
|
} else {
|
||||||
|
$payload['method'] = 'POST';
|
||||||
|
$payload['to_send']['update_date'] = $this->modif_dtime;
|
||||||
|
}
|
||||||
|
|
||||||
|
$item = new IDF_Queue();
|
||||||
|
$item->type = 'upload';
|
||||||
|
$item->payload = $payload;
|
||||||
|
$item->create();
|
||||||
|
|
||||||
if ('' == $conf->getVal('downloads_notification_email', '')) {
|
if ('' == $conf->getVal('downloads_notification_email', '')) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -31,17 +31,17 @@
|
|||||||
class IDF_Webhook
|
class IDF_Webhook
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Perform the POST request given the webhook payload.
|
* Perform the request given the webhook payload.
|
||||||
*
|
*
|
||||||
* @param array Payload
|
* @param array Payload
|
||||||
* @return bool Success or error
|
* @return bool Success or error
|
||||||
*/
|
*/
|
||||||
public static function postNotification($payload)
|
public static function processNotification($payload)
|
||||||
{
|
{
|
||||||
$data = json_encode($payload['to_send']);
|
$data = json_encode($payload['to_send']);
|
||||||
$sign = hash_hmac('md5', $data, $payload['authkey']);
|
$sign = hash_hmac('md5', $data, $payload['authkey']);
|
||||||
$params = array('http' => array(
|
$params = array('http' => array(
|
||||||
'method' => 'POST',
|
'method' => empty($payload['method']) ? 'POST' : $payload['method'],
|
||||||
'content' => $data,
|
'content' => $data,
|
||||||
'user_agent' => 'Indefero Hook Sender (http://www.indefero.net)',
|
'user_agent' => 'Indefero Hook Sender (http://www.indefero.net)',
|
||||||
'max_redirects' => 0,
|
'max_redirects' => 0,
|
||||||
@ -76,7 +76,7 @@ class IDF_Webhook
|
|||||||
public static function process($sender, &$params)
|
public static function process($sender, &$params)
|
||||||
{
|
{
|
||||||
$item = $params['item'];
|
$item = $params['item'];
|
||||||
if ($item->type != 'new_commit') {
|
if (!in_array($item->type, array('new_commit', 'upload'))) {
|
||||||
// We do nothing.
|
// We do nothing.
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -90,7 +90,7 @@ class IDF_Webhook
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// We have either to retry or to push for the first time.
|
// We have either to retry or to push for the first time.
|
||||||
$res = self::postNotification($item->payload);
|
$res = self::processNotification($item->payload);
|
||||||
if ($res) {
|
if ($res) {
|
||||||
$params['res']['IDF_Webhook::process'] = true;
|
$params['res']['IDF_Webhook::process'] = true;
|
||||||
} elseif ($item->trials >= 9) {
|
} elseif ($item->trials >= 9) {
|
||||||
|
Loading…
Reference in New Issue
Block a user