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);
/// "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);
* @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 = '';
$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"));
}
}
// 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');
// 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.");
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);
$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);