diff --git a/CHANGELOG b/CHANGELOG index 337cca4289..0708576f55 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -7,6 +7,7 @@ Version 2019.06 (UNRELEASED) (2019-06-?) Fixed tag completion painfully slow [AlfredSK] Fixed a regression in notifications [MrPetovan] Fixed an issue with smilies and code blocks [MrPetovan] + Fixed an AP issue with unavailable local profiles [MrPetovan] General Code cleaning and restructuring [nupplaphil] Added frio color scheme sharing [JeroenED] Added syslog and stream Logger [nupplaphil] @@ -14,7 +15,7 @@ Version 2019.06 (UNRELEASED) (2019-06-?) Added collapsible panel for connector permission fields [MrPetovan] Closed Issues: - 6303, 6478, 6319, 6921, 6903 + 6303, 6478, 6319, 6921, 6903, 6943 Version 2019.03 (2019-03-22) Friendica Core: diff --git a/src/Module/Profile.php b/src/Module/Profile.php index e43554a1ce..55150a9649 100644 --- a/src/Module/Profile.php +++ b/src/Module/Profile.php @@ -54,15 +54,21 @@ class Profile extends BaseModule { if (ActivityPub::isRequest()) { $user = DBA::selectFirst('user', ['uid'], ['nickname' => self::$which]); + $data = []; if (DBA::isResult($user)) { $data = ActivityPub\Transmitter::getProfile($user['uid']); + } + + if (!empty($data)) { System::jsonExit($data, 'application/activity+json'); } elseif (DBA::exists('userd', ['username' => self::$which])) { // Known deleted user - System::httpExit(410); + $data = ActivityPub\Transmitter::getDeletedUser(self::$which); + + System::jsonError(410, $data); } else { - // Unknown user - System::httpExit(404); + // Any other case (unknown, blocked, unverified, expired, no profile, no self contact) + System::jsonError(404, $data); } } } diff --git a/src/Protocol/ActivityPub/Transmitter.php b/src/Protocol/ActivityPub/Transmitter.php index eb1da09b3a..6e7bc73a5a 100644 --- a/src/Protocol/ActivityPub/Transmitter.php +++ b/src/Protocol/ActivityPub/Transmitter.php @@ -247,6 +247,23 @@ class Transmitter return $data; } + /** + * @param string $username + * @return array + * @throws \Friendica\Network\HTTPException\InternalServerErrorException + */ + public static function getDeletedUser($username) + { + return [ + '@context' => ActivityPub::CONTEXT, + 'id' => System::baseUrl() . '/profile/' . $username, + 'type' => 'Tombstone', + 'published' => DateTimeFormat::utcNow(DateTimeFormat::ATOM), + 'updated' => DateTimeFormat::utcNow(DateTimeFormat::ATOM), + 'deleted' => DateTimeFormat::utcNow(DateTimeFormat::ATOM), + ]; + } + /** * Returns an array with permissions of a given item array *