X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=mod%2Fpubsubhubbub.php;h=7f06f9db77d5fc3fdc32641a842a5659d915bd89;hb=5ebe10d7fc808dc2ed3502b532e6db020928aa1c;hp=bfe553c44caf1e8c91b5ee7cc74f1e2167fe3408;hpb=ff569756ee6c5e058700cf6428918f059525e77c;p=friendica.git diff --git a/mod/pubsubhubbub.php b/mod/pubsubhubbub.php index bfe553c44c..7f06f9db77 100644 --- a/mod/pubsubhubbub.php +++ b/mod/pubsubhubbub.php @@ -1,27 +1,34 @@ subscribe - // [hub_callback] => http://status.local/main/push/callback/1 - // [hub_verify] => sync - // [hub_verify_token] => af11... - // [hub_secret] => af11... - // [hub_topic] => http://friendica.local/dfrn_poll/sazius - - if($_SERVER['REQUEST_METHOD'] === 'POST') { + // [hub_mode] => subscribe + // [hub_callback] => http://status.local/main/push/callback/1 + // [hub_verify] => sync + // [hub_verify_token] => af11... + // [hub_secret] => af11... + // [hub_topic] => http://friendica.local/dfrn_poll/sazius + + if ($_SERVER['REQUEST_METHOD'] === 'POST') { $hub_mode = post_var('hub_mode'); $hub_callback = post_var('hub_callback'); $hub_verify = post_var('hub_verify'); @@ -32,22 +39,27 @@ function pubsubhubbub_init(&$a) { // check for valid hub_mode if ($hub_mode === 'subscribe') { $subscribe = 1; - } else if ($hub_mode === 'unsubscribe') { + } elseif ($hub_mode === 'unsubscribe') { $subscribe = 0; } else { logger("pubsubhubbub: invalid hub_mode=$hub_mode, ignoring."); - http_status_exit(404); + System::httpExit(404); } logger("pubsubhubbub: $hub_mode request from " . $_SERVER['REMOTE_ADDR']); - // get the nick name from the topic, a bit hacky but needed + // get the nick name from the topic, a bit hacky but needed as a fallback $nick = substr(strrchr($hub_topic, "/"), 1); + // Normally the url should now contain the nick name as last part of the url + if ($a->argc > 1) { + $nick = $a->argv[1]; + } + if (!$nick) { logger('pubsubhubbub: bad hub_topic=$hub_topic, ignoring.'); - http_status_exit(404); + System::httpExit(404); } // fetch user from database given the nickname @@ -55,9 +67,9 @@ function pubsubhubbub_init(&$a) { " AND `account_expired` = 0 AND `account_removed` = 0 LIMIT 1", dbesc($nick)); - if (!dbm::is_result($r)) { + if (!DBM::is_result($r)) { logger('pubsubhubbub: local account not found: ' . $nick); - http_status_exit(404); + System::httpExit(404); } $owner = $r[0]; @@ -66,25 +78,25 @@ function pubsubhubbub_init(&$a) { if ($r[0]['hidewall']) { logger('pubsubhubbub: local user ' . $nick . 'has chosen to hide wall, ignoring.'); - http_status_exit(403); + System::httpExit(403); } // get corresponding row from contact table $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND NOT `blocked`". " AND NOT `pending` AND `self` LIMIT 1", intval($owner['uid'])); - if (!dbm::is_result($r)) { + if (!DBM::is_result($r)) { logger('pubsubhubbub: contact not found.'); - http_status_exit(404); + System::httpExit(404); } $contact = $r[0]; // sanity check that topic URLs are the same - if(!link_compare($hub_topic, $contact['poll'])) { + if (!link_compare($hub_topic, $contact['poll'])) { logger('pubsubhubbub: hub topic ' . $hub_topic . ' != ' . $contact['poll']); - http_status_exit(404); + System::httpExit(404); } // do subscriber verification according to the PuSH protocol @@ -100,14 +112,14 @@ function pubsubhubbub_init(&$a) { // we don't actually enforce the lease time because GNU // Social/StatusNet doesn't honour it (yet) - $body = fetch_url($hub_callback . "?" . $params); + $body = Network::fetchUrl($hub_callback . "?" . $params); $ret = $a->get_curl_code(); // give up if the HTTP return code wasn't a success (2xx) if ($ret < 200 || $ret > 299) { logger("pubsubhubbub: subscriber verification at $hub_callback ". "returned $ret, ignoring."); - http_status_exit(404); + System::httpExit(404); } // check that the correct hub_challenge code was echoed back @@ -115,7 +127,7 @@ function pubsubhubbub_init(&$a) { logger("pubsubhubbub: subscriber did not echo back ". "hub.challenge, ignoring."); logger("\"$hub_challenge\" != \"".trim($body)."\""); - http_status_exit(404); + System::httpExit(404); } // fetch the old subscription if it exists @@ -123,16 +135,15 @@ function pubsubhubbub_init(&$a) { dbesc($hub_callback)); // delete old subscription if it exists - q("DELETE FROM `push_subscriber` WHERE `callback_url` = '%s'", - dbesc($hub_callback)); + dba::delete('push_subscriber', ['callback_url' => $hub_callback]); if ($subscribe) { - $last_update = datetime_convert('UTC','UTC','now','Y-m-d H:i:s'); + $last_update = DateTimeFormat::utcNow(); $push_flag = 0; // if we are just updating an old subscription, keep the // old values for push and last_update - if (dbm::is_result($r)) { + if (DBM::is_result($r)) { $last_update = $r[0]['last_update']; $push_flag = $r[0]['push']; } @@ -153,10 +164,8 @@ function pubsubhubbub_init(&$a) { logger("pubsubhubbub: successfully unsubscribed [$hub_callback]."); // we do nothing here, since the row was already deleted } - http_status_exit(202); + System::httpExit(202); } killme(); } - -?>