X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FWorker%2FPubSubPublish.php;h=0a60e5a5995ffc007598f8ad68a931cb20b61c7e;hb=f33bd5fc8e5d3cf9462869815e6c68df6fbfa039;hp=a287e89d33f6e88cecc85667b45949074a87ac5a;hpb=a32ba32ff468284641c55c4a08f8b6d949b33c0c;p=friendica.git diff --git a/src/Worker/PubSubPublish.php b/src/Worker/PubSubPublish.php index a287e89d33..0a60e5a599 100644 --- a/src/Worker/PubSubPublish.php +++ b/src/Worker/PubSubPublish.php @@ -7,92 +7,67 @@ namespace Friendica\Worker; use Friendica\App; use Friendica\Core\System; -use Friendica\Core\Config; -use Friendica\Core\Worker; use Friendica\Database\DBM; use Friendica\Protocol\OStatus; use Friendica\Util\Network; +use Friendica\Model\PushSubscriber; +use dba; require_once 'include/items.php'; class PubSubPublish { public static function execute($pubsubpublish_id = 0) { - global $a; - if ($pubsubpublish_id == 0) { - // We'll push to each subscriber that has push > 0, - // i.e. there has been an update (set in notifier.php). - $r = q("SELECT `id`, `callback_url` FROM `push_subscriber` WHERE `push` > 0 ORDER BY `last_update` DESC"); - - foreach ($r as $rr) { - logger("Publish feed to ".$rr["callback_url"], LOGGER_DEBUG); - Worker::add(['priority' => PRIORITY_HIGH, 'created' => $a->queue['created'], 'dont_fork' => true], - 'PubSubPublish', (int)$rr["id"]); - } + return; } self::publish($pubsubpublish_id); - - return; } private static function publish($id) { global $a; - $r = q("SELECT * FROM `push_subscriber` WHERE `id` = %d", intval($id)); - if (!DBM::is_result($r)) { + $subscriber = dba::selectFirst('push_subscriber', [], ['id' => $id]); + if (!DBM::is_result($subscriber)) { return; } - $rr = $r[0]; - /// @todo Check server status with PortableContact::checkServer() // Before this can be done we need a way to safely detect the server url. - logger("Generate feed of user ".$rr['nickname']." to ".$rr['callback_url']." - last updated ".$rr['last_update'], LOGGER_DEBUG); + logger("Generate feed of user " . $subscriber['nickname']. " to " . $subscriber['callback_url']. " - last updated " . $subscriber['last_update'], LOGGER_DEBUG); - $last_update = $rr['last_update']; - $params = OStatus::feed($rr['nickname'], $last_update); + $last_update = $subscriber['last_update']; + $params = OStatus::feed($subscriber['nickname'], $last_update); if (!$params) { return; } - $hmac_sig = hash_hmac("sha1", $params, $rr['secret']); + $hmac_sig = hash_hmac("sha1", $params, $subscriber['secret']); $headers = ["Content-type: application/atom+xml", sprintf("Link: <%s>;rel=hub,<%s>;rel=self", - System::baseUrl().'/pubsubhubbub/'.$rr['nickname'], - $rr['topic']), - "X-Hub-Signature: sha1=".$hmac_sig]; + System::baseUrl() . '/pubsubhubbub/' . $subscriber['nickname'], + $subscriber['topic']), + "X-Hub-Signature: sha1=" . $hmac_sig]; - logger('POST '.print_r($headers, true)."\n".$params, LOGGER_DEBUG); + logger('POST ' . print_r($headers, true) . "\n" . $params, LOGGER_DATA); - Network::postURL($rr['callback_url'], $params, $headers); + Network::post($subscriber['callback_url'], $params, $headers); $ret = $a->get_curl_code(); - if ($ret >= 200 && $ret <= 299) { - logger('successfully pushed to '.$rr['callback_url']); + $condition = ['id' => $subscriber['id']]; - // set last_update to the "created" date of the last item, and reset push=0 - q("UPDATE `push_subscriber` SET `push` = 0, last_update = '%s' WHERE id = %d", - dbesc($last_update), - intval($rr['id'])); + if ($ret >= 200 && $ret <= 299) { + logger('Successfully pushed to ' . $subscriber['callback_url']); + PushSubscriber::reset($subscriber['id'], $last_update); } else { - logger('error when pushing to '.$rr['callback_url'].' HTTP: '.$ret); - - // we use the push variable also as a counter, if we failed we - // increment this until some upper limit where we give up - $new_push = intval($rr['push']) + 1; - - if ($new_push > 30) // OK, let's give up - $new_push = 0; + logger('Delivery error when pushing to ' . $subscriber['callback_url'] . ' HTTP: ' . $ret); - q("UPDATE `push_subscriber` SET `push` = %d WHERE id = %d", - $new_push, - intval($rr['id'])); + PushSubscriber::delay($subscriber['id']); } } }