From 90e44437bdf37d8024ef609b2f7336dbdfc3b974 Mon Sep 17 00:00:00 2001
From: Yassine Doghri <yassine@doghri.fr>
Date: Tue, 15 Mar 2022 14:05:19 +0000
Subject: [PATCH] fix: remove cache from remote follow form to display error
 messages

---
 app/Controllers/ActorController.php           | 22 ++++++-------------
 app/Language/en/Fediverse.php                 |  1 +
 app/Language/fr/Fediverse.php                 |  9 ++++----
 app/Language/pl/Fediverse.php                 |  1 +
 .../Fediverse/Controllers/ActorController.php | 16 +++++++++-----
 themes/cp_app/_message_block.php              | 19 ++++++++++++++++
 6 files changed, 44 insertions(+), 24 deletions(-)
 create mode 100644 themes/cp_app/_message_block.php

diff --git a/app/Controllers/ActorController.php b/app/Controllers/ActorController.php
index 5f97e469b6..9e2138e117 100644
--- a/app/Controllers/ActorController.php
+++ b/app/Controllers/ActorController.php
@@ -30,21 +30,13 @@ class ActorController extends FediverseActorController
             $this->registerPodcastWebpageHit($this->actor->podcast->id);
         }
 
-        $cacheName = "page_podcast-{$this->actor->username}_follow";
-        if (! ($cachedView = cache($cacheName))) {
-            helper(['form', 'components', 'svg']);
-            $data = [
-                // @phpstan-ignore-next-line
-                'metatags' => get_follow_metatags($this->actor),
-                'actor' => $this->actor,
-            ];
-
-            return view('podcast/follow', $data, [
-                'cache' => DECADE,
-                'cache_name' => $cacheName,
-            ]);
-        }
+        helper(['form', 'components', 'svg']);
+        $data = [
+            // @phpstan-ignore-next-line
+            'metatags' => get_follow_metatags($this->actor),
+            'actor' => $this->actor,
+        ];
 
-        return $cachedView;
+        return view('podcast/follow', $data);
     }
 }
diff --git a/app/Language/en/Fediverse.php b/app/Language/en/Fediverse.php
index d1faa771af..32f54c074f 100644
--- a/app/Language/en/Fediverse.php
+++ b/app/Language/en/Fediverse.php
@@ -16,6 +16,7 @@ return [
         'title' => 'Follow {actorDisplayName}',
         'subtitle' => 'You are going to follow:',
         'accountNotFound' => 'The account could not be found.',
+        'remoteFollowNotAllowed' => 'Seems like the account server does not allow remote follows…',
         'submit' => 'Proceed to follow',
     ],
     'favourite' => [
diff --git a/app/Language/fr/Fediverse.php b/app/Language/fr/Fediverse.php
index 0baa767c58..7f22806ea5 100644
--- a/app/Language/fr/Fediverse.php
+++ b/app/Language/fr/Fediverse.php
@@ -15,23 +15,24 @@ return [
     'follow' => [
         'label' => 'Suivre',
         'title' => 'Suivre {actorDisplayName}',
-        'subtitle' => 'Vous allez suivre :',
+        'subtitle' => 'Vous allez suivre :',
         'accountNotFound' => 'Le compte n’a pas pu être trouvé.',
+        'remoteFollowNotAllowed' => 'Il semble que le serveur du compte ne permet pas le suivi d’un compte externe…',
         'submit' => 'Poursuivre',
     ],
     'favourite' => [
         'title' => 'Mettez la publication de {actorDisplayName} en favori',
-        'subtitle' => 'Vous allez mettre en favori :',
+        'subtitle' => 'Vous allez mettre en favori :',
         'submit' => 'Poursuivre',
     ],
     'reblog' => [
         'title' => 'Partagez la publication de {actorDisplayName}',
-        'subtitle' => 'Vous allez partager :',
+        'subtitle' => 'Vous allez partager :',
         'submit' => 'Poursuivre',
     ],
     'reply' => [
         'title' => 'Répondre à la publication de {actorDisplayName}',
-        'subtitle' => 'Vous allez répondre à :',
+        'subtitle' => 'Vous allez répondre à :',
         'submit' => 'Poursuivre',
     ],
 ];
diff --git a/app/Language/pl/Fediverse.php b/app/Language/pl/Fediverse.php
index cf063da340..5c825e2306 100644
--- a/app/Language/pl/Fediverse.php
+++ b/app/Language/pl/Fediverse.php
@@ -16,6 +16,7 @@ return [
         'title' => 'Obserwuj {actorDisplayName}',
         'subtitle' => 'Zamierzasz obserwować:',
         'accountNotFound' => 'Nie można znaleźć konta.',
+        'remoteFollowNotAllowed' => 'Seems like the account server does not allow remote follows…',
         'submit' => 'Przejdź do obserwowania',
     ],
     'favourite' => [
diff --git a/modules/Fediverse/Controllers/ActorController.php b/modules/Fediverse/Controllers/ActorController.php
index 7962a39676..57692c3c92 100644
--- a/modules/Fediverse/Controllers/ActorController.php
+++ b/modules/Fediverse/Controllers/ActorController.php
@@ -15,6 +15,7 @@ use CodeIgniter\Exceptions\PageNotFoundException;
 use CodeIgniter\HTTP\RedirectResponse;
 use CodeIgniter\HTTP\ResponseInterface;
 use CodeIgniter\I18n\Time;
+use Exception;
 use Modules\Fediverse\Config\Fediverse;
 use Modules\Fediverse\Entities\Actor;
 use Modules\Fediverse\Entities\Post;
@@ -353,10 +354,12 @@ class ActorController extends Controller
         // parse actor id to get actor and domain
         // check if actor and domain exist
 
-        if (
-            ! ($parts = split_handle($this->request->getPost('handle'))) ||
-            ! ($data = get_webfinger_data($parts['username'], $parts['domain']))
-        ) {
+        $handle = $this->request->getPost('handle');
+        $parts = split_handle($handle);
+
+        try {
+            $data = get_webfinger_data($parts['username'], $parts['domain']);
+        } catch (Exception) {
             return redirect()
                 ->back()
                 ->withInput()
@@ -372,7 +375,10 @@ class ActorController extends Controller
         if (! $ostatusKey) {
             // TODO: error, couldn't subscribe to activitypub account
             // The instance doesn't allow its users to follow others
-            return $this->response->setJSON([]);
+            return redirect()
+                ->back()
+                ->withInput()
+                ->with('error', lang('Fediverse.follow.remoteFollowNotAllowed'));
         }
 
         return redirect()->to(
diff --git a/themes/cp_app/_message_block.php b/themes/cp_app/_message_block.php
new file mode 100644
index 0000000000..1504aa372c
--- /dev/null
+++ b/themes/cp_app/_message_block.php
@@ -0,0 +1,19 @@
+<?php declare(strict_types=1);
+
+if (session()->has('message')): ?>
+    <Alert variant="success" class="mb-4"><?= esc(session('message')) ?></Alert>
+<?php endif; ?>
+
+<?php if (session()->has('error')): ?>
+    <Alert variant="danger" class="mb-4"><?= esc(session('error')) ?></Alert>
+<?php endif; ?>
+
+<?php if (session()->has('errors')): ?>
+    <Alert variant="danger" class="mb-4">
+        <ul>
+            <?php foreach (session('errors') as $error): ?>
+                <li><?= esc($error) ?></li>
+            <?php endforeach; ?>
+        </ul>
+    </Alert>
+<?php endif; ?>
-- 
GitLab