diff options
| author | Christian Weiske <cweiske@cweiske.de> | 2016-11-25 07:54:49 +0100 |
|---|---|---|
| committer | Christian Weiske <cweiske@cweiske.de> | 2016-11-25 07:56:16 +0100 |
| commit | acf02a1269b9c191a66a7ea476f11d53d4ad0c08 (patch) | |
| tree | 94332bd05859677747c4ffaad857b79f0c4351e2 | |
| parent | dd3e0698a71ca2746166f006135aeace83dfeb20 (diff) | |
| download | phinde-acf02a1269b9c191a66a7ea476f11d53d4ad0c08.tar.gz phinde-acf02a1269b9c191a66a7ea476f11d53d4ad0c08.zip | |
script to renew websub subscriptionsv0.2.0
| -rw-r--r-- | README.rst | 11 | ||||
| -rwxr-xr-x | bin/renew-subscriptions.php | 16 | ||||
| -rwxr-xr-x | bin/subscribe.php | 14 | ||||
| -rw-r--r-- | src/phinde/Subscriptions.php | 49 |
4 files changed, 85 insertions, 5 deletions
@@ -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( |
