X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=plugins%2FOStatus%2FOStatusPlugin.php;h=7c0530eb6611c2ed13da417e0eb562c7f2482c0b;hb=261ccfac8699534ff584a2f93d5dcd384529d855;hp=e6fa8f910a4db1b431bb5a7b1ee68d03d1318856;hpb=4527194e97d7f6dfd3e0ab55ac3c858e8ce68329;p=quix0rs-gnu-social.git diff --git a/plugins/OStatus/OStatusPlugin.php b/plugins/OStatus/OStatusPlugin.php index e6fa8f910a..7c0530eb66 100644 --- a/plugins/OStatus/OStatusPlugin.php +++ b/plugins/OStatus/OStatusPlugin.php @@ -1289,21 +1289,21 @@ class OStatusPlugin extends Plugin function onEndWebFingerNoticeLinks(XML_XRD $xrd, Notice $target) { $author = $target->getProfile(); - $salmon_url = common_local_url('usersalmon', array('id' => $author->id)); + $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); return true; } function onEndWebFingerProfileLinks(XML_XRD $xrd, Profile $target) { - $xrd->links[] = new XML_XRD_Element_Link(Discovery::UPDATESFROM, - common_local_url('ApiTimelineUser', - array('id' => $target->id, 'format' => 'atom')), - 'application/atom+xml'); + if ($target->getObjectType() === ActivityObject::PERSON) { + $this->addWebFingerPersonLinks($xrd, $target); + } - // Salmon - $salmon_url = common_local_url('usersalmon', - array('id' => $target->id)); + // Salmon + $profiletype = $this->profileTypeString($target); + $salmon_url = common_local_url("{$profiletype}salmon", array('id' => $target->id)); $xrd->links[] = new XML_XRD_Element_Link(Salmon::REL_SALMON, $salmon_url); @@ -1311,6 +1311,35 @@ class OStatusPlugin extends Plugin $xrd->links[] = new XML_XRD_Element_Link(Salmon::NS_REPLIES, $salmon_url); $xrd->links[] = new XML_XRD_Element_Link(Salmon::NS_MENTIONS, $salmon_url); + // TODO - finalize where the redirect should go on the publisher + $xrd->links[] = new XML_XRD_Element_Link('http://ostatus.org/schema/1.0/subscribe', + common_local_url('ostatussub') . '?profile={uri}', + null, // type not set + true); // isTemplate + + return true; + } + + protected function profileTypeString(Profile $target) + { + // This is just used to have a definitive string response to "USERsalmon" or "GROUPsalmon" + switch ($target->getObjectType()) { + case ActivityObject::PERSON: + return 'user'; + case ActivityObject::GROUP: + return 'group'; + default: + throw new ServerException('Unknown profile type for WebFinger profile links'); + } + } + + protected function addWebFingerPersonLinks(XML_XRD $xrd, Profile $target) + { + $xrd->links[] = new XML_XRD_Element_Link(Discovery::UPDATESFROM, + common_local_url('ApiTimelineUser', + array('id' => $target->id, 'format' => 'atom')), + 'application/atom+xml'); + // Get this profile's keypair $magicsig = Magicsig::getKV('user_id', $target->id); if (!$magicsig instanceof Magicsig && $target->isLocal()) { @@ -1323,14 +1352,6 @@ class OStatusPlugin extends Plugin $xrd->links[] = new XML_XRD_Element_Link(Magicsig::DIASPORA_PUBLICKEYREL, base64_encode($magicsig->exportPublicKey())); } - - // TODO - finalize where the redirect should go on the publisher - $xrd->links[] = new XML_XRD_Element_Link('http://ostatus.org/schema/1.0/subscribe', - common_local_url('ostatussub') . '?profile={uri}', - null, // type not set - true); // isTemplate - - return true; } public function onGetLocalAttentions(Profile $actor, array $attention_uris, array &$mentions, array &$groups) @@ -1352,10 +1373,16 @@ class OStatusPlugin extends Plugin return true; } - public function onProfileDeleteRelated($profile, &$related) + public function onProfileDeleteRelated(Profile $profile, array &$related) { // Ostatus_profile has a 'profile_id' property, which will be used to find the object $related[] = 'Ostatus_profile'; + + // Magicsig has a "user_id" column instead, so we have to delete it more manually: + $magicsig = Magicsig::getKV('user_id', $profile->id); + if ($magicsig instanceof Magicsig) { + $magicsig->delete(); + } return true; } }