aboutsummaryrefslogtreecommitdiff
path: root/src/phorkie/Notificator/Webhook.php
diff options
context:
space:
mode:
authorChristian Weiske <cweiske@cweiske.de>2013-11-22 21:32:06 +0100
committerChristian Weiske <cweiske@cweiske.de>2013-11-22 21:32:06 +0100
commitf47ddf0758f120dfb26f03fb36be5cd897a10f23 (patch)
tree9b64102a66eff570eee85c382688a2f1d423beb4 /src/phorkie/Notificator/Webhook.php
parent934246267dc4089dc0952bbe8412f32fd7346739 (diff)
downloadphorkie-f47ddf0758f120dfb26f03fb36be5cd897a10f23.tar.gz
phorkie-f47ddf0758f120dfb26f03fb36be5cd897a10f23.zip
first work on remote fork notifications with linkback (webmention/pingback)
Diffstat (limited to 'src/phorkie/Notificator/Webhook.php')
-rw-r--r--src/phorkie/Notificator/Webhook.php55
1 files changed, 55 insertions, 0 deletions
diff --git a/src/phorkie/Notificator/Webhook.php b/src/phorkie/Notificator/Webhook.php
new file mode 100644
index 0000000..5737243
--- /dev/null
+++ b/src/phorkie/Notificator/Webhook.php
@@ -0,0 +1,55 @@
+<?php
+namespace phorkie;
+
+/**
+ * Send out webhook callbacks when something happens
+ */
+class Notificator_Webhook
+{
+ protected $config;
+
+ public function __construct($config)
+ {
+ $this->config = $config;
+ }
+
+ /**
+ * Call webhook URLs with our payload
+ */
+ public function send($event, Repository $repo)
+ {
+ if (count($this->config) == 0) {
+ return;
+ }
+
+ /* slightly inspired by
+ https://help.github.com/articles/post-receive-hooks */
+ $payload = (object) array(
+ 'event' => $event,
+ 'author' => array(
+ 'name' => $_SESSION['name'],
+ 'email' => $_SESSION['email']
+ ),
+ 'repository' => array(
+ 'name' => $repo->getTitle(),
+ 'url' => $repo->getLink('display', null, true),
+ 'description' => $repo->getDescription(),
+ 'owner' => $repo->getOwner()
+ )
+ );
+ foreach ($this->config as $url) {
+ $req = new \HTTP_Request2($url);
+ $req->setMethod(\HTTP_Request2::METHOD_POST)
+ ->setHeader('Content-Type: application/vnd.phorkie.webhook+json')
+ ->setBody(json_encode($payload));
+ try {
+ $response = $req->send();
+ //FIXME log response codes != 200
+ } catch (HTTP_Request2_Exception $e) {
+ //FIXME log exceptions
+ }
+ }
+ }
+}
+?>
+