Proper ActivityPub profiles
This commit is contained in:
parent
e0d5b2ebd7
commit
01c16fcef0
@ -302,9 +302,11 @@ class ActivityPubPlugin extends Plugin
|
|||||||
public function onEndWebFingerProfileLinks(XML_XRD &$xrd, Managed_DataObject $object)
|
public function onEndWebFingerProfileLinks(XML_XRD &$xrd, Managed_DataObject $object)
|
||||||
{
|
{
|
||||||
if ($object->isPerson()) {
|
if ($object->isPerson()) {
|
||||||
$link = new XML_XRD_Element_Link ('self',
|
$link = new XML_XRD_Element_Link(
|
||||||
|
'self',
|
||||||
ActivityPubPlugin::actor_uri($object->getProfile()),
|
ActivityPubPlugin::actor_uri($object->getProfile()),
|
||||||
'application/activity+json');
|
'application/activity+json'
|
||||||
|
);
|
||||||
$xrd->links[] = clone ($link);
|
$xrd->links[] = clone ($link);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -86,37 +86,47 @@ class Activitypub_profile extends Profile
|
|||||||
$res = [
|
$res = [
|
||||||
'@context' => [
|
'@context' => [
|
||||||
"https://www.w3.org/ns/activitystreams",
|
"https://www.w3.org/ns/activitystreams",
|
||||||
|
"https://w3id.org/security/v1",
|
||||||
[
|
[
|
||||||
"@language" => "en"
|
'manuallyApprovesFollowers' => 'as=>manuallyApprovesFollowers',
|
||||||
|
'sensitive' => 'as=>sensitive',
|
||||||
|
'movedTo' => 'as=>movedTo',
|
||||||
|
'Hashtag' => 'as=>Hashtag',
|
||||||
|
'ostatus' => 'http=>//ostatus.org#',
|
||||||
|
'atomUri' => 'ostatus=>atomUri',
|
||||||
|
'inReplyToAtomUri' => 'ostatus=>inReplyToAtomUri',
|
||||||
|
'conversation' => 'ostatus=>conversation',
|
||||||
|
'schema' => 'http=>//schema.org#',
|
||||||
|
'PropertyValue' => 'schema=>PropertyValue',
|
||||||
|
'value' => 'schema=>value'
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
'id' => $uri,
|
'id' => $uri,
|
||||||
'type' => 'Person',
|
'type' => 'Person',
|
||||||
'preferredUsername' => $profile->getNickname(),
|
|
||||||
'is_local' => $profile->isLocal(),
|
|
||||||
'inbox' => common_local_url("apActorInbox", array("id" => $id)),
|
|
||||||
'name' => $profile->getFullname(),
|
|
||||||
'followers' => common_local_url("apActorFollowers", array("id" => $id)),
|
|
||||||
'followers_count' => $profile->subscriberCount(),
|
|
||||||
'following' => common_local_url("apActorFollowing", array("id" => $id)),
|
'following' => common_local_url("apActorFollowing", array("id" => $id)),
|
||||||
'following_count' => $profile->subscriptionCount(),
|
'followers' => common_local_url("apActorFollowers", array("id" => $id)),
|
||||||
'liked' => common_local_url("apActorLiked", array("id" => $id)),
|
'liked' => common_local_url("apActorLiked", array("id" => $id)),
|
||||||
'liked_count' => Fave::countByProfile($profile),
|
'inbox' => common_local_url("apActorInbox", array("id" => $id)),
|
||||||
|
'preferredUsername' => $profile->getNickname(),
|
||||||
|
'name' => $profile->getFullname(),
|
||||||
'summary' => ($desc = $profile->getDescription()) == null ? "" : $desc,
|
'summary' => ($desc = $profile->getDescription()) == null ? "" : $desc,
|
||||||
|
'url' => $profile->getUrl(),
|
||||||
|
'manuallyApprovesFollowers' => false,
|
||||||
|
'tag' => [],
|
||||||
|
'attachment' => [],
|
||||||
'icon' => [
|
'icon' => [
|
||||||
'type' => 'Image',
|
'type' => 'Image',
|
||||||
'width' => AVATAR_PROFILE_SIZE,
|
'mediaType' => 'image/jpeg',
|
||||||
'height' => AVATAR_PROFILE_SIZE,
|
'url' => $profile->avatarUrl()
|
||||||
'url' => $profile->avatarUrl(AVATAR_PROFILE_SIZE)
|
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
|
|
||||||
if ($profile->isLocal()) {
|
if ($profile->isLocal()) {
|
||||||
$res["sharedInbox"] = common_local_url("apSharedInbox", array("id" => $id));
|
$res['endpoints']['sharedInbox'] = common_local_url("apSharedInbox", array("id" => $id));
|
||||||
} else {
|
} else {
|
||||||
$aprofile = new Activitypub_profile();
|
$aprofile = new Activitypub_profile();
|
||||||
$aprofile = $aprofile->from_profile($profile);
|
$aprofile = $aprofile->from_profile($profile);
|
||||||
$res["sharedInbox"] = $aprofile->sharedInboxuri;
|
$res['endpoints']['sharedInbox'] = $aprofile->sharedInboxuri;
|
||||||
}
|
}
|
||||||
|
|
||||||
return $res;
|
return $res;
|
||||||
|
@ -203,12 +203,12 @@ class Activitypub_explorer
|
|||||||
private function store_profile($res)
|
private function store_profile($res)
|
||||||
{
|
{
|
||||||
$aprofile = new Activitypub_profile;
|
$aprofile = new Activitypub_profile;
|
||||||
$aprofile->uri = $res["id"];
|
$aprofile->uri = $res['id'];
|
||||||
$aprofile->nickname = $res["preferredUsername"];
|
$aprofile->nickname = $res['preferredUsername'];
|
||||||
$aprofile->fullname = $res["name"];
|
$aprofile->fullname = $res['name'];
|
||||||
$aprofile->bio = substr($res["summary"], 0, 1000);
|
$aprofile->bio = substr($res['summary'], 0, 1000);
|
||||||
$aprofile->inboxuri = $res["inbox"];
|
$aprofile->inboxuri = $res['inbox'];
|
||||||
$aprofile->sharedInboxuri = isset($res["sharedInbox"]) ? $res["sharedInbox"] : $res["inbox"];
|
$aprofile->sharedInboxuri = isset($res['endpoints']['sharedInbox']) ? $res['endpoints']['sharedInbox'] : $res['inbox'];
|
||||||
|
|
||||||
$aprofile->do_insert();
|
$aprofile->do_insert();
|
||||||
|
|
||||||
@ -225,7 +225,7 @@ class Activitypub_explorer
|
|||||||
*/
|
*/
|
||||||
private static function validate_remote_response($res)
|
private static function validate_remote_response($res)
|
||||||
{
|
{
|
||||||
if (!isset($res["id"], $res["preferredUsername"], $res["name"], $res["summary"], $res["inbox"])) {
|
if (!isset($res['id'], $res['preferredUsername'], $res['name'], $res['summary'], $res['inbox'])) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -247,12 +247,14 @@ class Activitypub_explorer
|
|||||||
$headers[] = 'User-Agent: GNUSocialBot v0.1 - https://gnu.io/social';
|
$headers[] = 'User-Agent: GNUSocialBot v0.1 - https://gnu.io/social';
|
||||||
$response = $client->get($url, $headers);
|
$response = $client->get($url, $headers);
|
||||||
if (!$response->isOk()) {
|
if (!$response->isOk()) {
|
||||||
throw new Exception("Invalid Actor URL.");
|
throw new Exception('Invalid Actor URL.');
|
||||||
}
|
}
|
||||||
$res = json_decode($response->getBody(), JSON_UNESCAPED_SLASHES);
|
$res = json_decode($response->getBody(), JSON_UNESCAPED_SLASHES);
|
||||||
if (self::validate_remote_response($res)) {
|
if (self::validate_remote_response($res)) {
|
||||||
return array("inbox" => $res["inbox"],
|
return [
|
||||||
"sharedInbox" => isset($res["sharedInbox"]) ? $res["sharedInbox"] : $res["inbox"]);
|
'inbox' => $res['inbox'],
|
||||||
|
'sharedInbox' => isset($res['endpoints']['sharedInbox']) ? $res['endpoints']['sharedInbox'] : $res['inbox']
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
Reference in New Issue
Block a user