commit: 7fdc3cde065ce20257e0e03e416ca18775b18943
parent 1f52246a026a81f216ebf761b2bda5a2035abbbc
Author: Ilja <domainepublic@spectraltheorem.be>
Date:   Fri, 23 Oct 2020 20:27:13 +0200
Return maps in node_info
It's easiest (and imo most proper) to use tuples {"instance, "reason"} in BE,
but for FE maps like %{"instance": "instance", "reason", "reason"} are better.
I changed it so that node_info returns maps now for simple_policy and quarantined instances.
Diffstat:
3 files changed, 26 insertions(+), 3 deletions(-)
diff --git a/lib/pleroma/web/activity_pub/mrf/simple_policy.ex b/lib/pleroma/web/activity_pub/mrf/simple_policy.ex
@@ -263,6 +263,9 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicy do
     mrf_simple =
       Config.get(:mrf_simple)
       |> Enum.map(fn {k, v} -> {k, Enum.reject(v, fn {v, _} -> v in exclusions end)} end)
+      |> Enum.map(fn {k, v} ->
+        {k, Enum.map(v, fn {i, r} -> %{"instance" => i, "reason" => r} end)}
+      end)
       |> Enum.into(%{})
 
     {:ok, %{mrf_simple: mrf_simple}}
diff --git a/lib/pleroma/web/mastodon_api/views/instance_view.ex b/lib/pleroma/web/mastodon_api/views/instance_view.ex
@@ -95,7 +95,11 @@ defmodule Pleroma.Web.MastodonAPI.InstanceView do
       {:ok, data} = MRF.describe()
 
       data
-      |> Map.merge(%{quarantined_instances: quarantined})
+      |> Map.merge(%{
+        quarantined_instances:
+          quarantined
+          |> Enum.map(fn {instance, reason} -> %{"instance" => instance, "reason" => reason} end)
+      })
     else
       %{}
     end
diff --git a/test/pleroma/web/node_info_test.exs b/test/pleroma/web/node_info_test.exs
@@ -150,6 +150,22 @@ defmodule Pleroma.Web.NodeInfoTest do
            )
   end
 
+  test "it shows quarantined instances data if enabled", %{conn: conn} do
+    clear_config([:mrf, :transparency], true)
+
+    quarantined_instances = [{"example.com", ""}]
+    clear_config([:instance, :quarantined_instances], quarantined_instances)
+
+    expected_config = [%{"instance" => "example.com", "reason" => ""}]
+
+    response =
+      conn
+      |> get("/nodeinfo/2.1.json")
+      |> json_response(:ok)
+
+    assert response["metadata"]["federation"]["quarantined_instances"] == expected_config
+  end
+
   test "it shows MRF transparency data if enabled", %{conn: conn} do
     clear_config([:mrf, :policies], [Pleroma.Web.ActivityPub.MRF.SimplePolicy])
     clear_config([:mrf, :transparency], true)
@@ -157,7 +173,7 @@ defmodule Pleroma.Web.NodeInfoTest do
     simple_config = %{"reject" => [{"example.com", ""}]}
     clear_config(:mrf_simple, simple_config)
 
-    expected_config = %{"reject" => [["example.com", ""]]}
+    expected_config = %{"reject" => [%{"instance" => "example.com", "reason" => ""}]}
 
     response =
       conn
@@ -175,7 +191,7 @@ defmodule Pleroma.Web.NodeInfoTest do
     simple_config = %{"reject" => [{"example.com", ""}, {"other.site", ""}]}
     clear_config(:mrf_simple, simple_config)
 
-    expected_config = %{"reject" => [["example.com", ""]]}
+    expected_config = %{"reject" => [%{"instance" => "example.com", "reason" => ""}]}
 
     response =
       conn