<?php
/**
- * @copyright Copyright (C) 2020, Friendica
+ * @copyright Copyright (C) 2010-2021, the Friendica project
*
* @license GNU AGPL version 3 or any later version
*
$url = $apcontact['url'];
}
- $data = ActivityPub::fetchContent($url);
- if (empty($data)) {
+ $curlResult = HTTPSignature::fetchRaw($url);
+ $failed = empty($curlResult) || empty($curlResult->getBody()) ||
+ (!$curlResult->isSuccess() && ($curlResult->getReturnCode() != 410));
+
+ if (!$failed) {
+ $data = json_decode($curlResult->getBody(), true);
+ $failed = empty($data) || !is_array($data);
+ }
+
+ if (!$failed && ($curlResult->getReturnCode() == 410)) {
+ $data = ['@context' => ActivityPub::CONTEXT, 'id' => $url, 'type' => 'Tombstone'];
+ }
+
+ if ($failed) {
self::markForArchival($fetched_contact ?: []);
return $fetched_contact;
}
$compacted = JsonLD::compact($data);
-
if (empty($compacted['@id'])) {
return $fetched_contact;
}
}
// Quit if none of the basic values are set
- if (empty($apcontact['url']) || empty($apcontact['inbox']) || empty($apcontact['type'])) {
+ if (empty($apcontact['url']) || empty($apcontact['type']) || (($apcontact['type'] != 'Tombstone') && empty($apcontact['inbox']))) {
return $fetched_contact;
+ } elseif ($apcontact['type'] == 'Tombstone') {
+ // The "inbox" field must have a content
+ $apcontact['inbox'] = '';
}
// Quit if this doesn't seem to be an account at all
unset($parts['path']);
if (empty($apcontact['addr'])) {
- if (!empty($apcontact['nick'])) {
+ if (!empty($apcontact['nick']) && is_array($parts)) {
$apcontact['addr'] = $apcontact['nick'] . '@' . str_replace('//', '', Network::unparseURL($parts));
} else {
$apcontact['addr'] = '';
}
if (!empty($apcontact['following'])) {
- $data = ActivityPub::fetchContent($apcontact['following']);
- if (!empty($data)) {
- if (!empty($data['totalItems'])) {
- $apcontact['following_count'] = $data['totalItems'];
- }
+ $following = ActivityPub::fetchContent($apcontact['following']);
+ if (!empty($following['totalItems'])) {
+ $apcontact['following_count'] = $following['totalItems'];
}
}
if (!empty($apcontact['followers'])) {
- $data = ActivityPub::fetchContent($apcontact['followers']);
- if (!empty($data)) {
- if (!empty($data['totalItems'])) {
- $apcontact['followers_count'] = $data['totalItems'];
- }
+ $followers = ActivityPub::fetchContent($apcontact['followers']);
+ if (!empty($followers['totalItems'])) {
+ $apcontact['followers_count'] = $followers['totalItems'];
}
}
if (!empty($apcontact['outbox'])) {
- $data = ActivityPub::fetchContent($apcontact['outbox']);
- if (!empty($data)) {
- if (!empty($data['totalItems'])) {
- $apcontact['statuses_count'] = $data['totalItems'];
- }
+ $outbox = ActivityPub::fetchContent($apcontact['outbox']);
+ if (!empty($outbox['totalItems'])) {
+ $apcontact['statuses_count'] = $outbox['totalItems'];
}
}
if (empty($apcontact['subscribe'])) {
$apcontact['subscribe'] = null;
- }
+ }
if (!empty($apcontact['baseurl']) && empty($fetched_contact['gsid'])) {
$apcontact['gsid'] = GServer::getID($apcontact['baseurl']);