From 4e3e9dc7638d30fc481be7ebdcfe2139ad12c75e Mon Sep 17 00:00:00 2001
From: Michael <heluecht@pirati.ca>
Date: Tue, 17 May 2022 12:46:55 +0000
Subject: [PATCH] Cache the profile as well

---
 src/Model/Item.php                       |  1 +
 src/Protocol/ActivityPub/Transmitter.php | 12 +++++++++++-
 2 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/src/Model/Item.php b/src/Model/Item.php
index 50ef7c8c06..8bf133f5d8 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 023bd5c83c..6701f4254c 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;
 	}
-- 
2.39.5