[Pleroma.Web.ActivityPub.Transmogrifier]: fix emoji in tag when it’s not in a array...
authorHaelwenn (lanodan) Monnier <contact@hacktivis.me>
Fri, 21 Sep 2018 12:36:29 +0000 (14:36 +0200)
committerHaelwenn (lanodan) Monnier <contact@hacktivis.me>
Thu, 27 Sep 2018 18:00:46 +0000 (20:00 +0200)
Also simplified the code for name trimming.

And not copying the Map.merge part as it looks buggy.
See: https://queer.hacktivis.me/objects/a9f21ebc-9a12-4a6c-89d5-3d46955c6ee8

lib/pleroma/web/activity_pub/transmogrifier.ex

index 8677bc2083ce341528debf334d3af0c44f47e919..a37c8477fdc111f55dbeb96049d809070035001d 100644 (file)
@@ -164,21 +164,13 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do
     object
   end
 
-  def fix_emoji(object) do
-    tags = object["tag"] || []
+  def fix_emoji(%{"tag" => tags} = object) when is_list(tags) do
     emoji = tags |> Enum.filter(fn data -> data["type"] == "Emoji" and data["icon"] end)
 
     emoji =
       emoji
       |> Enum.reduce(%{}, fn data, mapping ->
-        name = data["name"]
-
-        name =
-          if String.starts_with?(name, ":") do
-            name |> String.slice(1..-2)
-          else
-            name
-          end
+        name = String.trim(data["name"], ":")
 
         mapping |> Map.put(name, data["icon"]["url"])
       end)
@@ -190,6 +182,18 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do
     |> Map.put("emoji", emoji)
   end
 
+  def fix_emoji(%{"tag" => %{"type" => "Emoji"} = tag} = object) do
+    name = String.trim(tag["name"], ":")
+    emoji = %{name => tag["icon"]["url"]}
+
+    object
+    |> Map.put("emoji", emoji)
+  end
+
+  def fix_emoji(object) do
+    object
+  end
+
   def fix_tag(object) do
     tags =
       (object["tag"] || [])