aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Weiske <cweiske@cweiske.de>2016-11-25 07:54:49 +0100
committerChristian Weiske <cweiske@cweiske.de>2016-11-25 07:56:16 +0100
commitacf02a1269b9c191a66a7ea476f11d53d4ad0c08 (patch)
tree94332bd05859677747c4ffaad857b79f0c4351e2
parentdd3e0698a71ca2746166f006135aeace83dfeb20 (diff)
downloadphinde-acf02a1269b9c191a66a7ea476f11d53d4ad0c08.tar.gz
phinde-acf02a1269b9c191a66a7ea476f11d53d4ad0c08.zip
script to renew websub subscriptionsv0.2.0
-rw-r--r--README.rst11
-rwxr-xr-xbin/renew-subscriptions.php16
-rwxr-xr-xbin/subscribe.php14
-rw-r--r--src/phinde/Subscriptions.php49
4 files changed, 85 insertions, 5 deletions
diff --git a/README.rst b/README.rst
index e34cd15..1008361 100644
--- a/README.rst
+++ b/README.rst
@@ -30,6 +30,7 @@ Features
- or use the ``site`` GET parameter:
``/?q=foo&site=example.org/dir``
- OpenSearch support with HTML and Atom result lists
+* Instant indexing with WebSub (formerly PubSubHubbub)
============
@@ -42,6 +43,16 @@ Dependencies
- Net_URL2
+=====
+Setup
+=====
+This section is incomplete.
+
+Cron job
+========
+Run ``bin/renew-subscriptions.php`` once a day with cron.
+
+
============
About phinde
============
diff --git a/bin/renew-subscriptions.php b/bin/renew-subscriptions.php
new file mode 100755
index 0000000..16bc11b
--- /dev/null
+++ b/bin/renew-subscriptions.php
@@ -0,0 +1,16 @@
+#!/usr/bin/env php
+<?php
+namespace phinde;
+/**
+ * Renew subscriptions
+ * Call this once a day with cron.
+ */
+require_once __DIR__ . '/../src/init.php';
+
+chdir(__DIR__);
+$subDb = new Subscriptions();
+foreach ($subDb->getExpiring() as $sub) {
+ Log::info('Expires soon: ' . $sub['sub_topic']);
+ passthru('./subscribe.php ' . escapeshellarg($sub['sub_topic']));
+}
+?>
diff --git a/bin/subscribe.php b/bin/subscribe.php
index 768ee10..411fa86 100755
--- a/bin/subscribe.php
+++ b/bin/subscribe.php
@@ -43,12 +43,16 @@ if ($topic != $url) {
}
$sub = $subDb->get($topic);
-if ($sub !== false) {
- Log::error('Topic exists already in subscription table');
- Log::info('Current status: ' . $sub->sub_status);
- exit(3);
+if ($sub === false) {
+ $subDb->create($topic);
+} else {
+ Log::info(
+ 'Topic exists already in subscription table with status '
+ . $sub->sub_status
+ );
+ Log::info('Renewing subscription...');
+ $subDb->renew($sub->sub_id);
}
-$subDb->create($topic);
$sub = $subDb->get($topic);
$callbackUrl = $GLOBALS['phinde']['baseurl'] . 'push-subscription.php'
diff --git a/src/phinde/Subscriptions.php b/src/phinde/Subscriptions.php
index 5aac9b2..87119c8 100644
--- a/src/phinde/Subscriptions.php
+++ b/src/phinde/Subscriptions.php
@@ -60,6 +60,23 @@ class Subscriptions
}
/**
+ * Get all topics that either expired or expire soon
+ *
+ * @return \PDOStatement Result iterator
+ */
+ public function getExpiring()
+ {
+ $stmt = $this->db->prepare(
+ 'SELECT * FROM subscriptions'
+ . ' WHERE sub_status IN ("active", "expired")'
+ . ' AND DATEDIFF(sub_expires, NOW()) <= 2'
+ );
+ $stmt->execute();
+
+ return $stmt;
+ }
+
+ /**
* Create a new subscription entry in database.
* Automatically generates secret, capkey and lease seconds.
*
@@ -95,6 +112,23 @@ class Subscriptions
}
/**
+ * Renew a subscription: Set its status to "subscribing"
+ *
+ * @param integer $subId Subscription ID
+ *
+ * @return void
+ */
+ public function renew($subId)
+ {
+ $this->db->prepare(
+ 'UPDATE subscriptions'
+ . ' SET sub_status = "subscribing"'
+ . ' , sub_updated = NOW()'
+ . ' WHERE sub_id = :id'
+ )->execute([':id' => $subId]);
+ }
+
+ /**
* A subscription has been confirmed by the hub - mark it as active.
*
* @param integer $subId Subscription ID
@@ -137,6 +171,14 @@ class Subscriptions
)->execute([':id' => $subId]);
}
+ /**
+ * Subscription has been cancelled/denied for some reason
+ *
+ * @param integer $subId Subscription ID
+ * @param string $reason Cancellation reason
+ *
+ * @return void
+ */
public function denied($subId, $reason)
{
$this->db->prepare(
@@ -148,6 +190,13 @@ class Subscriptions
)->execute([':id' => $subId, ':reason' => $reason]);
}
+ /**
+ * Topic update notification has been received
+ *
+ * @param integer $subId Subscription ID
+ *
+ * @return void
+ */
public function pinged($subId)
{
$this->db->prepare(