also resolve @full@tags in mfm (#62)
authorfloatingghost <hannah@coffee-and-dreams.uk>
Mon, 11 Jul 2022 13:48:43 +0000 (13:48 +0000)
committerfloatingghost <hannah@coffee-and-dreams.uk>
Mon, 11 Jul 2022 13:48:43 +0000 (13:48 +0000)
Reviewed-on: https://akkoma.dev/AkkomaGang/akkoma/pulls/62

lib/pleroma/web/activity_pub/object_validators/article_note_page_validator.ex
test/fixtures/misskey/mfm_x_format.json
test/pleroma/web/activity_pub/object_validators/article_note_page_validator_test.exs

index 243a25b18f2b3ba976ac9bcb04348d3b43aba6bc..5e377c2946d7faa10eefb875c288fe071bdc5028 100644 (file)
@@ -81,9 +81,23 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.ArticleNotePageValidator do
 
   defp fix_replies(data), do: data
 
-  defp remote_mention_resolver(%{"tag" => tags}, "@" <> nickname = mention, buffer, opts, acc) do
+  defp remote_mention_resolver(
+         %{"id" => ap_id, "tag" => tags},
+         "@" <> nickname = mention,
+         buffer,
+         opts,
+         acc
+       ) do
+    initial_host =
+      ap_id
+      |> URI.parse()
+      |> Map.get(:host)
+
     with mention_tag <-
-           Enum.find(tags, fn t -> t["type"] == "Mention" && t["name"] == mention end),
+           Enum.find(tags, fn t ->
+             t["type"] == "Mention" &&
+               (t["name"] == mention || mention == "#{t["name"]}@#{initial_host}")
+           end),
          false <- is_nil(mention_tag),
          {:ok, %User{} = user} <- User.get_or_fetch_by_ap_id(mention_tag["href"]) do
       link = Pleroma.Formatter.mention_tag(user, nickname, opts)
index a24e90e7e592242e6537d2add7759e95ab6858a6..21aae9204ccc99cb6202dc840b6ed548c5784d12 100644 (file)
@@ -5,7 +5,7 @@
   "summary": null,
   "content": "this gets replaced",
   "source": {
-    "content": "@akkoma_user @remote_user @oops_not_a_mention linkifylink #dancedance $[jelly mfm goes here] \n\n## aaa",
+    "content": "@akkoma_user @remote_user @full_tag_remote_user@misskey.local.live @oops_not_a_mention linkifylink #dancedance $[jelly mfm goes here] \n\n## aaa",
     "mediaType": "text/x.misskeymarkdown"
   },
   "published": "2022-07-10T15:37:36.368Z",
       "type": "Mention",
       "href": "http://misskey.local.live/users/remote_user",
       "name": "@remote_user"
+    },
+    {
+      "type": "Mention",
+      "href": "http://misskey.local.live/users/full_tag_remote_user",
+      "name": "@full_tag_remote_user"
     }
   ]
 }
index 4ea7a5bc029f375630f6a01479afbd91ff4d223c..8b39829168bbd06de32a45dab570aeb5ec0807d6 100644 (file)
@@ -80,6 +80,12 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.ArticleNotePageValidatorTest
           ap_id: "http://misskey.local.live/users/remote_user"
         })
 
+      full_tag_remote_user =
+        insert(:user, %{
+          nickname: "full_tag_remote_user",
+          ap_id: "http://misskey.local.live/users/full_tag_remote_user"
+        })
+
       insert(:user, %{ap_id: "https://misskey.local.live/users/92hzkskwgy"})
 
       note =
@@ -93,7 +99,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.ArticleNotePageValidatorTest
           content: content,
           source: %{
             "content" =>
-              "@akkoma_user @remote_user @oops_not_a_mention linkifylink #dancedance $[jelly mfm goes here] \n\n## aaa",
+              "@akkoma_user @remote_user @full_tag_remote_user@misskey.local.live @oops_not_a_mention linkifylink #dancedance $[jelly mfm goes here] \n\n## aaa",
             "mediaType" => "text/x.misskeymarkdown"
           }
         }
@@ -105,6 +111,9 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.ArticleNotePageValidatorTest
       assert content =~
                "<span class=\"h-card\"><a class=\"u-url mention\" data-user=\"#{remote_user.id}\" href=\"#{remote_user.ap_id}\" rel=\"ugc\">@<span>remote_user</span></a></span>"
 
+      assert content =~
+               "<span class=\"h-card\"><a class=\"u-url mention\" data-user=\"#{full_tag_remote_user.id}\" href=\"#{full_tag_remote_user.ap_id}\" rel=\"ugc\">@<span>full_tag_remote_user</span></a></span>"
+
       assert content =~ "@oops_not_a_mention"
       assert content =~ "$[jelly mfm goes here] <br><br>## aaa"
     end