Set instance reachable on fetch
authorHaelwenn (lanodan) Monnier <contact@hacktivis.me>
Tue, 15 Nov 2022 17:23:47 +0000 (17:23 +0000)
committerFloatingGhost <hannah@coffee-and-dreams.uk>
Tue, 15 Nov 2022 17:23:47 +0000 (17:23 +0000)
lib/pleroma/object/fetcher.ex
test/pleroma/object/fetcher_test.exs

index 8ec28345f3c29bd4321a8edfedc4bff9402d3fa8..aafab6643762f66a58e49d56892feb1dbc6089d3 100644 (file)
@@ -4,6 +4,7 @@
 
 defmodule Pleroma.Object.Fetcher do
   alias Pleroma.HTTP
+  alias Pleroma.Instances
   alias Pleroma.Maps
   alias Pleroma.Object
   alias Pleroma.Object.Containment
@@ -234,6 +235,10 @@ defmodule Pleroma.Object.Fetcher do
          {:ok, body} <- get_object(id),
          {:ok, data} <- safe_json_decode(body),
          :ok <- Containment.contain_origin_from_id(id, data) do
+      unless Instances.reachable?(id) do
+        Instances.set_reachable(id)
+      end
+
       {:ok, data}
     else
       {:scheme, _} ->
index c321032adb7f896fc794e16749ecae797959bdbc..cd5437617b6aa5229df14e747e16bcc43ee0a2a1 100644 (file)
@@ -6,6 +6,7 @@ defmodule Pleroma.Object.FetcherTest do
   use Pleroma.DataCase
 
   alias Pleroma.Activity
+  alias Pleroma.Instances
   alias Pleroma.Object
   alias Pleroma.Object.Fetcher
 
@@ -159,6 +160,17 @@ defmodule Pleroma.Object.FetcherTest do
                  "https://patch.cx/media/03ca3c8b4ac3ddd08bf0f84be7885f2f88de0f709112131a22d83650819e36c2.json"
                )
     end
+
+    test "it resets instance reachability on successful fetch" do
+      id = "http://mastodon.example.org/@admin/99541947525187367"
+      Instances.set_consistently_unreachable(id)
+      refute Instances.reachable?(id)
+
+      {:ok, object} =
+        Fetcher.fetch_object_from_id("http://mastodon.example.org/@admin/99541947525187367")
+
+      assert Instances.reachable?(id)
+    end
   end
 
   describe "implementation quirks" do