From 2d0153195e59facc8890f50b0547528bf021b161 Mon Sep 17 00:00:00 2001 From: Mikael Nordfeldth Date: Sun, 27 Mar 2016 14:56:27 +0200 Subject: [PATCH] Output proper remote info on WebFinger notice resources --- plugins/OStatus/OStatusPlugin.php | 21 +++++++++++++++---- .../lib/webfingerresource/notice.php | 14 +++++++++++-- 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/plugins/OStatus/OStatusPlugin.php b/plugins/OStatus/OStatusPlugin.php index 78ced64b5d..72f246d68f 100644 --- a/plugins/OStatus/OStatusPlugin.php +++ b/plugins/OStatus/OStatusPlugin.php @@ -1307,10 +1307,23 @@ class OStatusPlugin extends Plugin function onEndWebFingerNoticeLinks(XML_XRD $xrd, Notice $target) { - $author = $target->getProfile(); - $profiletype = $this->profileTypeString($author); - $salmon_url = common_local_url("{$profiletype}salmon", array('id' => $author->id)); - $xrd->links[] = new XML_XRD_Element_Link(Salmon::REL_SALMON, $salmon_url); + $salmon_url = null; + $actor = $target->getProfile(); + if ($actor->isLocal()) { + $profiletype = $this->profileTypeString($actor); + $salmon_url = common_local_url("{$profiletype}salmon", array('id' => $actor->getID())); + } else { + try { + $oprofile = Ostatus_profile::fromProfile($actor); + $salmon_url = $oprofile->salmonuri; + } catch (Exception $e) { + // Even though it's not a local user, we couldn't get an Ostatus_profile?! + } + } + // Ostatus_profile salmon URL may be empty + if (!empty($salmon_url)) { + $xrd->links[] = new XML_XRD_Element_Link(Salmon::REL_SALMON, $salmon_url); + } return true; } diff --git a/plugins/WebFinger/lib/webfingerresource/notice.php b/plugins/WebFinger/lib/webfingerresource/notice.php index b967bd9e1c..295a856f36 100644 --- a/plugins/WebFinger/lib/webfingerresource/notice.php +++ b/plugins/WebFinger/lib/webfingerresource/notice.php @@ -20,17 +20,27 @@ class WebFingerResource_Notice extends WebFingerResource public function updateXRD(XML_XRD $xrd) { if (Event::handle('StartWebFingerNoticeLinks', array($xrd, $this->object))) { - $xrd->links[] = new XML_XRD_Element_Link('alternate', + if ($this->object->isLocal()) { + $xrd->links[] = new XML_XRD_Element_Link('alternate', common_local_url('ApiStatusesShow', array('id'=>$this->object->id, 'format'=>'atom')), 'application/atom+xml'); - $xrd->links[] = new XML_XRD_Element_Link('alternate', + $xrd->links[] = new XML_XRD_Element_Link('alternate', common_local_url('ApiStatusesShow', array('id'=>$this->object->id, 'format'=>'json')), 'application/json'); + } else { + try { + $xrd->links[] = new XML_XRD_Element_Link('alternate', + $this->object->getUrl(), + 'text/html'); + } catch (InvalidUrlException $e) { + // don't do a fallback in webfinger + } + } Event::handle('EndWebFingerNoticeLinks', array($xrd, $this->object)); } }