]> git.mxchange.org Git - friendica.git/commitdiff
The "hub" url now contains the nickname
authorMichael <heluecht@pirati.ca>
Wed, 23 Aug 2017 05:01:15 +0000 (05:01 +0000)
committerMichael <heluecht@pirati.ca>
Wed, 23 Aug 2017 05:01:15 +0000 (05:01 +0000)
include/dfrn.php
include/ostatus.php
include/pubsubpublish.php
mod/pubsubhubbub.php

index 8484f7c61995aef19062ea0cb0276db47f01eca0..c2b599ce249ec12cb01b7a3d76f3f47b04411e1d 100644 (file)
@@ -504,7 +504,7 @@ class dfrn {
 
                if ($public) {
                        // DFRN itself doesn't uses this. But maybe someone else wants to subscribe to the public feed.
-                       ostatus::hublinks($doc, $root);
+                       ostatus::hublinks($doc, $root, $owner["nick"]);
 
                        $attributes = array("rel" => "salmon", "href" => App::get_baseurl()."/salmon/".$owner["nick"]);
                        xml::add_element($doc, $root, "link", "", $attributes);
index 3e27bc5d5792a2b1000baa409a0bd32106d94e7d..892d2499333ca4b382c42e81f60af6fee3ca187c 100644 (file)
@@ -1470,7 +1470,7 @@ class ostatus {
                ///             "type" => "application/json");
                /// xml::add_element($doc, $root, "link", "", $attributes);
 
-               self::hublinks($doc, $root);
+               self::hublinks($doc, $root, $owner["nick"]);
 
                $attributes = array("href" => App::get_baseurl()."/salmon/".$owner["nick"], "rel" => "salmon");
                xml::add_element($doc, $root, "link", "", $attributes);
@@ -1494,7 +1494,7 @@ class ostatus {
         * @param object $doc XML document
         * @param object $root XML root element where the hub links are added
         */
-       public static function hublinks($doc, $root) {
+       public static function hublinks($doc, $root, $nick) {
                $hub = get_config('system','huburl');
 
                $hubxml = '';
@@ -1505,8 +1505,9 @@ class ostatus {
                                        $h = trim($h);
                                        if (! strlen($h))
                                                continue;
-                                       if ($h === '[internal]')
-                                               $h = App::get_baseurl() . '/pubsubhubbub';
+                                       if ($h === '[internal]') {
+                                               $h = App::get_baseurl() . '/pubsubhubbub/'.$nick;
+                                       }
                                        xml::add_element($doc, $root, "link", "", array("href" => $h, "rel" => "hub"));
                                }
                        }
index 2527963d4c786ec6029d90dbdd7197375ff424b6..6702a21490bc37e572b200a9f4cb06f01b112688 100644 (file)
@@ -54,7 +54,7 @@ function handle_pubsubhubbub($id) {
 
        $headers = array("Content-type: application/atom+xml",
                        sprintf("Link: <%s>;rel=hub,<%s>;rel=self",
-                               App::get_baseurl().'/pubsubhubbub',
+                               App::get_baseurl().'/pubsubhubbub/'.$rr['nickname'],
                                $rr['topic']),
                        "X-Hub-Signature: sha1=".$hmac_sig);
 
index da2f94748943887d7fe3c3dc8a710ac0ce820209..477d1e2968f2053d00aba2021a412068e39357ef 100644 (file)
@@ -16,14 +16,14 @@ function pubsubhubbub_init(App $a) {
        // 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');
@@ -34,7 +34,7 @@ function pubsubhubbub_init(App $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.");
@@ -44,9 +44,14 @@ function pubsubhubbub_init(App $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);
@@ -83,7 +88,7 @@ function pubsubhubbub_init(App $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);