diff --git a/src/Model/Item.php b/src/Model/Item.php index 50ef7c8c0..8bf133f5d 100644 --- a/src/Model/Item.php +++ b/src/Model/Item.php @@ -1225,6 +1225,7 @@ class Item if ($posted_item['origin'] && ($posted_item['uid'] != 0) && in_array($posted_item['gravity'], [GRAVITY_PARENT, GRAVITY_COMMENT])) { DI::cache()->delete(ActivityPub\Transmitter::CACHEKEY_OUTBOX . $posted_item['uid']); + DI::cache()->delete(ActivityPub\Transmitter::CACHEKEY_PROFILE . $posted_item['uid']); } return $post_user_id; diff --git a/src/Protocol/ActivityPub/Transmitter.php b/src/Protocol/ActivityPub/Transmitter.php index 023bd5c83..6701f4254 100644 --- a/src/Protocol/ActivityPub/Transmitter.php +++ b/src/Protocol/ActivityPub/Transmitter.php @@ -61,6 +61,7 @@ class Transmitter const CACHEKEY_FEATURED = 'transmitter:getFeatured:'; const CACHEKEY_CONTACTS = 'transmitter:getContacts:'; const CACHEKEY_OUTBOX = 'transmitter:getOutbox:'; + const CACHEKEY_PROFILE = 'transmitter:getProfile:'; /** * Add relay servers to the list of inboxes @@ -429,12 +430,19 @@ class Transmitter * Return the ActivityPub profile of the given user * * @param int $uid User ID + * @param boolean $nocache Wether to bypass caching * @return array with profile data * @throws HTTPException\NotFoundException * @throws HTTPException\InternalServerErrorException */ - public static function getProfile(int $uid): array + public static function getProfile(int $uid, $nocache = false): array { + $cachekey = self::CACHEKEY_PROFILE . $uid; + $result = DI::cache()->get($cachekey); + if (!$nocache && !is_null($result)) { + return $result; + } + $owner = User::getOwnerDataById($uid); if (!isset($owner['id'])) { DI::logger()->error('Unable to find owner data for uid', ['uid' => $uid, 'callstack' => System::callstack(20)]); @@ -528,6 +536,8 @@ class Transmitter $data['generator'] = self::getService(); + DI::cache()->set($cachekey, $data, Duration::DAY); + // tags: https://kitty.town/@inmysocks/100656097926961126.json return $data; }