From: Christian Weiske Date: Fri, 25 Nov 2016 06:54:49 +0000 (+0100) Subject: script to renew websub subscriptions X-Git-Tag: v0.2.0 X-Git-Url: https://git.cweiske.de/phinde.git/commitdiff_plain/acf02a1269b9c191a66a7ea476f11d53d4ad0c08?hp=dd3e0698a71ca2746166f006135aeace83dfeb20 script to renew websub subscriptions --- 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 +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 @@ -59,6 +59,23 @@ class Subscriptions return $res; } + /** + * 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. @@ -94,6 +111,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. * @@ -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(