Create Object.hashtags/1 wrapper
authorHaelwenn (lanodan) Monnier <contact@hacktivis.me>
Tue, 22 Dec 2020 02:54:57 +0000 (03:54 +0100)
committerHaelwenn (lanodan) Monnier <contact@hacktivis.me>
Tue, 22 Dec 2020 04:15:34 +0000 (05:15 +0100)
lib/pleroma/object.ex
lib/pleroma/web/activity_pub/mrf/simple_policy.ex
lib/pleroma/web/activity_pub/transmogrifier.ex
lib/pleroma/web/mastodon_api/views/status_view.ex
lib/pleroma/web/templates/feed/feed/_activity.atom.eex
lib/pleroma/web/templates/feed/feed/_activity.rss.eex
lib/pleroma/web/templates/feed/feed/_tag_activity.atom.eex

index 052ad413bd6c7b2897b3b5823a60f1b884f96394..00d561d1b9cd75a3497e0644afea58c65bfe0b0b 100644 (file)
@@ -344,4 +344,8 @@ defmodule Pleroma.Object do
 
   def self_replies(object, opts \\ []),
     do: replies(object, Keyword.put(opts, :self_only, true))
+
+  def hashtags(%{"hashtags" => hashtags}), do: hashtags || []
+  def hashtags(%{"tag" => tags}), do: Enum.filter(tags, &is_bitstring(&1))
+  def hashtags(_), do: []
 end
index 2fa7b3194d02235856ab7b1bfcd08aaede549b9d..8e0514dc830c20b8840ee7bdb7ccd84858b9977a 100644 (file)
@@ -8,6 +8,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicy do
 
   alias Pleroma.Config
   alias Pleroma.FollowingRelationship
+  alias Pleroma.Object
   alias Pleroma.User
   alias Pleroma.Web.ActivityPub.MRF
 
@@ -76,7 +77,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicy do
       if MRF.subdomain_match?(media_nsfw, actor_host) do
         child_object =
           child_object
-          |> Map.put("hashtags", (child_object["hashtags"] || []) ++ ["nsfw"])
+          |> Map.put("hashtags", Object.hashtags(child_object) ++ ["nsfw"])
           |> Map.put("sensitive", true)
 
         Map.put(object, "object", child_object)
index d3dc637dac34a3f2391517b2a915206f8b2349de..36ef6a454e54a0cc8ca38c0844532f3a68836a43 100644 (file)
@@ -863,23 +863,18 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do
   def maybe_fix_object_url(data), do: data
 
   def add_hashtags(object) do
-    tags =
-      ((object["hashtags"] || []) ++ (object["tag"] || []))
-      |> Enum.map(fn
-        # Expand internal representation tags into AS2 tags.
-        tag when is_binary(tag) ->
-          %{
-            "href" => Pleroma.Web.Endpoint.url() <> "/tags/#{tag}",
-            "name" => "##{tag}",
-            "type" => "Hashtag"
-          }
-
-        # Do not process tags which are already AS2 tag objects.
-        tag when is_map(tag) ->
-          tag
+    hashtags =
+      object
+      |> Object.hashtags()
+      |> Enum.map(fn tag ->
+        %{
+          "href" => Pleroma.Web.Endpoint.url() <> "/tags/#{tag}",
+          "name" => "##{tag}",
+          "type" => "Hashtag"
+        }
       end)
 
-    Map.put(object, "tag", tags)
+    Map.put(object, "tag", hashtags ++ (object["tag"] || []))
   end
 
   # TODO These should be added on our side on insertion, it doesn't make much
index 6fc6272c28922b63c1cb4fc17b668aad62ef3e05..b39f05d13c736b94bf2860191d75222cd9e2c622 100644 (file)
@@ -347,7 +347,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do
       media_attachments: attachments,
       poll: render(PollView, "show.json", object: object, for: opts[:for]),
       mentions: mentions,
-      tags: build_tags(object.data["hashtags"] || tags),
+      tags: build_tags(Object.hashtags(object.data)),
       application: %{
         name: "Web",
         website: nil
index 12a9545f3458530131875b56bd8e6a4eacaf2b78..cb18abb5db9958658ec1d8f7e232480545a72ee9 100644 (file)
@@ -22,7 +22,7 @@
     <link type="text/html" href='<%= @data["external_url"] %>' rel="alternate"/>
   <% end %>
 
-  <%= for hashtag <- @data["hashtags"] || [] do %>
+  <%= for hashtag <- Object.hashtags(@data) do %>
     <category term="<%= hashtag %>"></category>
   <% end %>
 
index 00872b4b76db926e224001c3829fcc4ac7835c73..6ef24d0ef595dee79dce09b18616a7bf1fbdde78 100644 (file)
@@ -21,7 +21,7 @@
     <link><%= @data["external_url"] %></link>
   <% end %>
 
-  <%= for hashtag <- @data["hashtags"] || [] do %>
+  <%= for hashtag <- Object.hashtags(@data) do %>
     <category term="<%= hashtag %>"></category>
   <% end %>
 
index 1377a6bbc72b2ecb41f6e5e2fc7e118ab9baec04..098e2820558515bdd6248260bb8a10db517f8ea0 100644 (file)
@@ -41,7 +41,7 @@
       <% end %>
     <% end %>
 
-    <%= for hashtag <- @data["hashtags"] || [] do %>
+    <%= for hashtag <- Object.hashtags(@data) do %>
       <category term="<%= hashtag %>"></category>
     <% end %>