Return maps in node_info
authorIlja <domainepublic@spectraltheorem.be>
Fri, 23 Oct 2020 18:27:13 +0000 (20:27 +0200)
committerHaelwenn (lanodan) Monnier <contact@hacktivis.me>
Fri, 6 Aug 2021 05:59:53 +0000 (07:59 +0200)
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.

lib/pleroma/web/activity_pub/mrf/simple_policy.ex
lib/pleroma/web/mastodon_api/views/instance_view.ex
test/pleroma/web/node_info_test.exs

index 2f26fc3a01104373f9d4c08d33cfcfba8446d693..0853a05a787a43011b196fc2ae7591118588d176 100644 (file)
@@ -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}}
index 3528185d50345e102edc18686db70bde420cd08f..db40ea3fab8f143cdc1092ffe587925950cc2290 100644 (file)
@@ -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
index 477c44a518d60e822c7df84cbb598f6a90384ba0..cb910d6686ff228fce48c016c741b9877d56d05d 100644 (file)
@@ -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