From 7bcbfb32f7cca08d111be46c7f1640e372d4a4b0 Mon Sep 17 00:00:00 2001
From: Yassine Doghri <yassine@doghri.fr>
Date: Fri, 28 May 2021 17:04:54 +0000
Subject: [PATCH] fix(activity-pub): cache issues when navigating to activity
 stream urls

---
 .../Controllers/ActorController.php           | 22 +++++++++++++++----
 app/Libraries/ActivityPub/Core/ObjectType.php |  4 ++--
 .../ActivityPub/Models/ActorModel.php         |  5 ++++-
 3 files changed, 24 insertions(+), 7 deletions(-)

diff --git a/app/Libraries/ActivityPub/Controllers/ActorController.php b/app/Libraries/ActivityPub/Controllers/ActorController.php
index e8feb89f0d..88b4dbd62a 100644
--- a/app/Libraries/ActivityPub/Controllers/ActorController.php
+++ b/app/Libraries/ActivityPub/Controllers/ActorController.php
@@ -48,7 +48,10 @@ class ActorController extends Controller
         return $this->{$method}(...$params);
     }
 
-    public function index(): RedirectResponse
+    /**
+     * @noRector ReturnTypeDeclarationRector
+     */
+    public function index(): ResponseInterface
     {
         $actorObjectClass = $this->config->actorObject;
         $actorObject = new $actorObjectClass($this->actor);
@@ -60,6 +63,8 @@ class ActorController extends Controller
 
     /**
      * Handles incoming requests from fediverse servers
+     *
+     * @noRector ReturnTypeDeclarationRector
      */
     public function inbox(): ResponseInterface
     {
@@ -228,7 +233,10 @@ class ActorController extends Controller
         }
     }
 
-    public function outbox(): RedirectResponse
+    /**
+     * @noRector ReturnTypeDeclarationRector
+     */
+    public function outbox(): ResponseInterface
     {
         // get published activities by publication date
         $actorActivity = model('ActivityModel')
@@ -257,7 +265,10 @@ class ActorController extends Controller
             ->setBody($collection->toJSON());
     }
 
-    public function followers(): RedirectResponse
+    /**
+     * @noRector ReturnTypeDeclarationRector
+     */
+    public function followers(): ResponseInterface
     {
         // get followers for a specific actor
         $followers = model('ActorModel')
@@ -334,7 +345,10 @@ class ActorController extends Controller
         );
     }
 
-    public function activity(string $activityId): RedirectResponse
+    /**
+     * @noRector ReturnTypeDeclarationRector
+     */
+    public function activity(string $activityId): ResponseInterface
     {
         if (
             ! ($activity = model('ActivityModel')->getActivityById($activityId))
diff --git a/app/Libraries/ActivityPub/Core/ObjectType.php b/app/Libraries/ActivityPub/Core/ObjectType.php
index bfd0c4b301..2d87340060 100644
--- a/app/Libraries/ActivityPub/Core/ObjectType.php
+++ b/app/Libraries/ActivityPub/Core/ObjectType.php
@@ -33,7 +33,7 @@ class ObjectType extends AbstractObject
     protected array $to = ['https://www.w3.org/ns/activitystreams#Public'];
 
     /**
-     * @var string[]
+     * @var string[]|null
      */
-    protected array $cc = [];
+    protected ?array $cc = null;
 }
diff --git a/app/Libraries/ActivityPub/Models/ActorModel.php b/app/Libraries/ActivityPub/Models/ActorModel.php
index 0c98e9f64e..789714f519 100644
--- a/app/Libraries/ActivityPub/Models/ActorModel.php
+++ b/app/Libraries/ActivityPub/Models/ActorModel.php
@@ -84,7 +84,10 @@ class ActorModel extends Model
             $domain = get_current_domain();
         }
 
-        $cacheName = "actor-{$username}-{$domain}";
+        // remove colons for port if set
+        $cacheDomain = str_replace(':', '', $domain);
+
+        $cacheName = "actor-{$username}-{$cacheDomain}";
         if (! ($found = cache($cacheName))) {
             $found = $this->where([
                 'username' => $username,
-- 
GitLab