From 0b5bc62b33a655488afe73b35945adcbab11300d Mon Sep 17 00:00:00 2001
From: lain <lain@soykaf.club>
Date: Wed, 23 May 2018 17:25:24 +0200
Subject: [PATCH] Don't save double tags in AP objects we create

This crashed Mastodon workers.
---
 lib/pleroma/web/common_api/utils.ex     |  2 +-
 test/web/common_api/common_api_test.exs | 13 +++++++++++++
 2 files changed, 14 insertions(+), 1 deletion(-)
 create mode 100644 test/web/common_api/common_api_test.exs

diff --git a/lib/pleroma/web/common_api/utils.ex b/lib/pleroma/web/common_api/utils.ex
index e774743a2..71412eea8 100644
--- a/lib/pleroma/web/common_api/utils.ex
+++ b/lib/pleroma/web/common_api/utils.ex
@@ -133,7 +133,7 @@ def make_note_data(
       "context" => context,
       "attachment" => attachments,
       "actor" => actor,
-      "tag" => tags |> Enum.map(fn {_, tag} -> tag end)
+      "tag" => tags |> Enum.map(fn {_, tag} -> tag end) |> Enum.uniq()
     }
 
     if inReplyTo do
diff --git a/test/web/common_api/common_api_test.exs b/test/web/common_api/common_api_test.exs
new file mode 100644
index 000000000..b597e6e0a
--- /dev/null
+++ b/test/web/common_api/common_api_test.exs
@@ -0,0 +1,13 @@
+defmodule Pleroma.Web.CommonAPI.UtilsTest do
+  use Pleroma.DataCase
+  alias Pleroma.Web.CommonAPI
+
+  import Pleroma.Factory
+
+  test "it de-duplicates tags" do
+    user = insert(:user)
+    {:ok, activity} = CommonAPI.post(user, %{"status" => "#2hu #2HU"})
+
+    assert activity.data["object"]["tag"] == ["2hu"]
+  end
+end