Differentiate on group and user for WebFinger data

This commit is contained in:
Mikael Nordfeldth 2015-01-26 12:10:27 +01:00
parent 9f9af9a139
commit 7beec74f0c
1 changed files with 37 additions and 16 deletions

View File

@ -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)