From e2afce34b68d88ec8e1ff624fe0a245fd0726fee Mon Sep 17 00:00:00 2001
From: lain <lain@soykaf.club>
Date: Fri, 22 Mar 2019 11:57:20 +0100
Subject: [PATCH] NodeInfo: Return safe_dm_mentions feature flag.

---
 .../web/nodeinfo/nodeinfo_controller.ex       |  3 +++
 test/web/node_info_test.exs                   | 23 +++++++++++++++++++
 2 files changed, 26 insertions(+)

diff --git a/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex b/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex
index 8c775ce24..216a962bd 100644
--- a/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex
+++ b/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex
@@ -124,6 +124,9 @@ def raw_nodeinfo do
         end,
         if Keyword.get(instance, :allow_relay) do
           "relay"
+        end,
+        if Keyword.get(instance, :safe_dm_mentions) do
+          "safe_dm_mentions"
         end
       ]
       |> Enum.filter(& &1)
diff --git a/test/web/node_info_test.exs b/test/web/node_info_test.exs
index 038feecc1..2fc42b7cc 100644
--- a/test/web/node_info_test.exs
+++ b/test/web/node_info_test.exs
@@ -108,4 +108,27 @@ test "returns software.repository field in nodeinfo 2.1", %{conn: conn} do
     assert result = json_response(conn, 200)
     assert Pleroma.Application.repository() == result["software"]["repository"]
   end
+
+  test "it returns the safe_dm_mentions feature if enabled", %{conn: conn} do
+    option = Pleroma.Config.get([:instance, :safe_dm_mentions])
+    Pleroma.Config.put([:instance, :safe_dm_mentions], true)
+
+    response =
+      conn
+      |> get("/nodeinfo/2.1.json")
+      |> json_response(:ok)
+
+    assert "safe_dm_mentions" in response["metadata"]["features"]
+
+    Pleroma.Config.put([:instance, :safe_dm_mentions], false)
+
+    response =
+      conn
+      |> get("/nodeinfo/2.1.json")
+      |> json_response(:ok)
+
+    refute "safe_dm_mentions" in response["metadata"]["features"]
+
+    Pleroma.Config.put([:instance, :safe_dm_mentions], option)
+  end
 end