PuSH 0.4: No outgoing 'sync' verifications. Feed renewal script. No auto-renewal.

Among other things (such as permanent subscriptions), Pubsubhubbub 0.4
removed the "sync" verification method. This means that any incoming
PuSH subscription requests that follow the 0.4 spec won't really
_require_that we handle it as a background process, but if we were to
try direct verification of the subscription - and fail - there's no way
we could  pick up the ball again. So _essentially_ we require background
processing with retries.

This means we must implement something like the "poorman cron" or
similar, so background processing can be handled
on-demand/on-site-visit. This is how Friendica, Drupal etc. handles it
and is necessary for environments where we can't run separate queue
daemons.

When the poorman-cron-ish thing is implemented, auto-renewal will work
for all users.

PuSH 0.4 spec:
    https://pubsubhubbub.googlecode.com/git/pubsubhubbub-core-0.4.html
More on PuSH 0.4 release (incl. breaking changes):
    https://groups.google.com/forum/#!msg/pubsubhubbub/7RPlYMds4RI/2mIHQTdV3aoJ
This commit is contained in:
Mikael Nordfeldth
2013-11-02 20:02:28 +01:00
parent 2cecfe8f82
commit ab4113168f
5 changed files with 86 additions and 50 deletions

View File

@@ -82,9 +82,8 @@ class PushCallbackAction extends Action
$mode = $this->arg('hub_mode');
$topic = $this->arg('hub_topic');
$challenge = $this->arg('hub_challenge');
$lease_seconds = $this->arg('hub_lease_seconds');
$verify_token = $this->arg('hub_verify_token');
common_log(LOG_INFO, __METHOD__ . ": sub verification mode: $mode topic: $topic challenge: $challenge lease_seconds: $lease_seconds verify_token: $verify_token");
$lease_seconds = $this->arg('hub_lease_seconds'); // Must be >0 for PuSH 0.4!
common_log(LOG_INFO, __METHOD__ . ": sub verification mode: $mode topic: $topic challenge: $challenge lease_seconds: $lease_seconds");
if ($mode != 'subscribe' && $mode != 'unsubscribe') {
// TRANS: Client exception. %s is an invalid value for hub.mode.
@@ -92,16 +91,11 @@ class PushCallbackAction extends Action
}
$feedsub = FeedSub::getKV('uri', $topic);
if (!$feedsub) {
if (!$feedsub instanceof FeedSub) {
// TRANS: Client exception. %s is an invalid feed name.
throw new ClientException(sprintf(_m('Bad hub.topic feed "%s".'),$topic), 404);
}
if ($feedsub->verify_token !== $verify_token) {
// TRANS: Client exception. %1$s the invalid token, %2$s is the topic for which the invalid token was given.
throw new ClientException(sprintf(_m('Bad hub.verify_token %1$s for %2$s.'),$token,$topic), 404);
}
if ($mode == 'subscribe') {
// We may get re-sub requests legitimately.
if ($feedsub->sub_state != 'subscribe' && $feedsub->sub_state != 'active') {