]> git.mxchange.org Git - friendica.git/blobdiff - mod/pubsubhubbub.php
Merge pull request #4328 from tobiasd/20180125-msg
[friendica.git] / mod / pubsubhubbub.php
index b0e3ef30998ec3b891291d7b5392bba1df1aac20..f3134308fb9fff24c1783fc0774df09a9a8e9168 100644 (file)
@@ -1,30 +1,31 @@
 <?php
 
-if(! function_exists('post_var')) {
+use Friendica\App;
+use Friendica\Core\Config;
+use Friendica\Database\DBM;
+
 function post_var($name) {
        return (x($_POST, $name)) ? notags(trim($_POST[$name])) : '';
 }
-}
 
-if(! function_exists('pubsubhubbub_init')) {
-function pubsubhubbub_init(&$a) {
+function pubsubhubbub_init(App $a) {
        // PuSH subscription must be considered "public" so just block it
        // if public access isn't enabled.
-       if (get_config('system', 'block_public')) {
+       if (Config::get('system', 'block_public')) {
                http_status_exit(403);
        }
 
        // Subscription request from subscriber
        // https://pubsubhubbub.googlecode.com/git/pubsubhubbub-core-0.4.html#anchor4
        // Example from GNU Social:
-    // [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] => 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');
@@ -35,7 +36,7 @@ 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.");
@@ -45,9 +46,14 @@ function pubsubhubbub_init(&$a) {
                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);
@@ -58,7 +64,7 @@ function pubsubhubbub_init(&$a) {
                           " AND `account_expired` = 0 AND `account_removed` = 0 LIMIT 1",
                           dbesc($nick));
 
-               if(!count($r)) {
+               if (!DBM::is_result($r)) {
                        logger('pubsubhubbub: local account not found: ' . $nick);
                        http_status_exit(404);
                }
@@ -76,7 +82,7 @@ function pubsubhubbub_init(&$a) {
                $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND NOT `blocked`".
                           " AND NOT `pending` AND `self` LIMIT 1",
                           intval($owner['uid']));
-               if(!count($r)) {
+               if (!DBM::is_result($r)) {
                        logger('pubsubhubbub: contact not found.');
                        http_status_exit(404);
                }
@@ -84,7 +90,7 @@ function pubsubhubbub_init(&$a) {
                $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);
@@ -135,7 +141,7 @@ function pubsubhubbub_init(&$a) {
 
                        // if we are just updating an old subscription, keep the
                        // old values for push and last_update
-                       if (count($r)) {
+                       if (DBM::is_result($r)) {
                                $last_update = $r[0]['last_update'];
                                $push_flag = $r[0]['push'];
                        }
@@ -161,5 +167,3 @@ function pubsubhubbub_init(&$a) {
 
        killme();
 }
-}
-?>