X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=plugins%2FOStatus%2FOStatusPlugin.php;h=7c0530eb6611c2ed13da417e0eb562c7f2482c0b;hb=261ccfac8699534ff584a2f93d5dcd384529d855;hp=6652647771f97631c2593e84ba7e9b266bf05ae7;hpb=d4e76bc25b5bdcb47d8d267fcb7b9f3b9f0b9585;p=quix0rs-gnu-social.git diff --git a/plugins/OStatus/OStatusPlugin.php b/plugins/OStatus/OStatusPlugin.php index 6652647771..7c0530eb66 100644 --- a/plugins/OStatus/OStatusPlugin.php +++ b/plugins/OStatus/OStatusPlugin.php @@ -51,7 +51,7 @@ class OStatusPlugin extends Plugin * @param URLMapper $m path-to-action mapper * @return boolean hook return */ - function onRouterInitialized(URLMapper $m) + public function onRouterInitialized(URLMapper $m) { // Discovery actions $m->connect('main/ostatustag', @@ -306,7 +306,7 @@ class OStatusPlugin extends Plugin * @param array &$mention in/out param: set of found mentions * @return boolean hook return value */ - function onEndFindMentions(Profile $sender, $text, &$mentions) + function onEndFindMentions($sender, $text, &$mentions) { $matches = array(); @@ -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()) { @@ -1320,15 +1349,9 @@ class OStatusPlugin extends Plugin if ($magicsig instanceof Magicsig) { $xrd->links[] = new XML_XRD_Element_Link(Magicsig::PUBLICKEYREL, 'data:application/magic-public-key,'. $magicsig->toString()); + $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) @@ -1340,21 +1363,26 @@ class OStatusPlugin extends Plugin static public function onCheckActivityAuthorship(Activity $activity, Profile &$profile) { try { - $oprofile = Ostatus_profile::getFromProfile($profile); - $oprofile = $oprofile->checkAuthorship($activity); - $profile = $oprofile->localProfile(); + $oprofile = Ostatus_profile::ensureProfileURL($profile->getUrl()); + $profile = $oprofile->checkAuthorship($activity); } catch (Exception $e) { - common_log(LOG_ERR, 'Could not get a profile or check authorship ('.get_class($e).': "'.$e->getMessage().'")'); + common_log(LOG_ERR, 'Could not get a profile or check authorship ('.get_class($e).': "'.$e->getMessage().'") for activity ID: '.$activity->id); $profile = null; return false; } 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; } }