[#534] Refactoring / tweaks per MR review.
authorIvan Tashkinov <ivantashkinov@gmail.com>
Mon, 28 Jan 2019 08:03:52 +0000 (11:03 +0300)
committerIvan Tashkinov <ivantashkinov@gmail.com>
Mon, 28 Jan 2019 08:03:52 +0000 (11:03 +0300)
lib/pleroma/instances/instance.ex
lib/pleroma/plugs/set_requester_reachable_plug.ex [new file with mode: 0644]
lib/pleroma/web/activity_pub/activity_pub.ex
lib/pleroma/web/activity_pub/activity_pub_controller.ex
lib/pleroma/web/controller_helper.ex
lib/pleroma/web/ostatus/ostatus_controller.ex
lib/pleroma/web/salmon/salmon.ex
lib/pleroma/web/websub/websub.ex
lib/pleroma/web/websub/websub_controller.ex
priv/repo/migrations/20190123125546_create_instances.exs

index 60e8d0e21facc6bee96134f7b0a115d64c58dddf..e3af4a8a718aa67ebe724aa4868467f01498b044 100644 (file)
@@ -13,7 +13,6 @@ defmodule Pleroma.Instances.Instance do
   schema "instances" do
     field(:host, :string)
     field(:unreachable_since, :naive_datetime)
-    field(:reachability_checked_at, :naive_datetime)
 
     timestamps()
   end
@@ -22,7 +21,7 @@ defmodule Pleroma.Instances.Instance do
 
   def changeset(struct, params \\ %{}) do
     struct
-    |> cast(params, [:host, :unreachable_since, :reachability_checked_at])
+    |> cast(params, [:host, :unreachable_since])
     |> validate_required([:host])
     |> unique_constraint(:host)
   end
@@ -66,7 +65,7 @@ defmodule Pleroma.Instances.Instance do
          %Instance{} = existing_record <- Repo.get_by(Instance, %{host: host}) do
       {:ok, _instance} =
         existing_record
-        |> changeset(%{unreachable_since: nil, reachability_checked_at: DateTime.utc_now()})
+        |> changeset(%{unreachable_since: nil})
         |> Repo.update()
     end
   end
@@ -80,27 +79,22 @@ defmodule Pleroma.Instances.Instance do
     host = host(url)
     existing_record = Repo.get_by(Instance, %{host: host})
 
-    changes = %{
-      unreachable_since: unreachable_since,
-      reachability_checked_at: NaiveDateTime.utc_now()
-    }
+    changes = %{unreachable_since: unreachable_since}
 
-    if existing_record do
-      update_changes =
-        if existing_record.unreachable_since &&
-             NaiveDateTime.compare(existing_record.unreachable_since, unreachable_since) != :gt,
-           do: Map.delete(changes, :unreachable_since),
-           else: changes
-
-      {:ok, _instance} =
-        existing_record
-        |> changeset(update_changes)
-        |> Repo.update()
-    else
-      {:ok, _instance} =
+    cond do
+      is_nil(existing_record) ->
         %Instance{}
         |> changeset(Map.put(changes, :host, host))
         |> Repo.insert()
+
+      existing_record.unreachable_since &&
+          NaiveDateTime.compare(existing_record.unreachable_since, unreachable_since) != :gt ->
+        {:noop, existing_record}
+
+      true ->
+        existing_record
+        |> changeset(changes)
+        |> Repo.update()
     end
   end
 
diff --git a/lib/pleroma/plugs/set_requester_reachable_plug.ex b/lib/pleroma/plugs/set_requester_reachable_plug.ex
new file mode 100644 (file)
index 0000000..88551be
--- /dev/null
@@ -0,0 +1,16 @@
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
+# SPDX-License-Identifier: AGPL-3.0-only
+
+defmodule Pleroma.Web.Plugs.SetRequesterReachablePlug do
+  import Plug.Conn
+
+  def init(_), do: []
+
+  def call(%Plug.Conn{} = conn, _) do
+    with [referer] <- get_req_header(conn, "referer"),
+         do: Pleroma.Instances.set_reachable(referer)
+
+    conn
+  end
+end
index 4b34334a0908d339239f174b201245ec24fdb5d2..4232d6c0a6bc5783d8aee01892dc0b6c9e9459b4 100644 (file)
@@ -722,15 +722,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
     end)
   end
 
-  def publish_one(%{inbox: inbox} = activity) do
-    if Instances.reachable?(inbox) do
-      do_publish_one(activity)
-    else
-      {:error, :noop}
-    end
-  end
-
-  defp do_publish_one(%{inbox: inbox, json: json, actor: actor, id: id}) do
+  def publish_one(%{inbox: inbox, json: json, actor: actor, id: id}) do
     Logger.info("Federating #{id} to #{inbox}")
     host = URI.parse(inbox).host
 
index dc353dff030c7a51feb6f6cd32511e01910c4cd7..fadb038a21a9f2e486123715b118130be59d6062 100644 (file)
@@ -18,8 +18,8 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubController do
   action_fallback(:errors)
 
   plug(Pleroma.Web.FederatingPlug when action in [:inbox, :relay])
+  plug(Pleroma.Web.Plugs.SetRequesterReachablePlug when action in [:inbox])
   plug(:relay_active? when action in [:relay])
-  plug(:set_requester_reachable when action in [:inbox])
 
   def relay_active?(conn, _) do
     if Keyword.get(Application.get_env(:pleroma, :instance), :allow_relay) do
@@ -291,9 +291,4 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubController do
     |> put_status(500)
     |> json("error")
   end
-
-  defp set_requester_reachable(conn, _) do
-    Pleroma.Web.ControllerHelper.set_requester_reachable(conn)
-    conn
-  end
 end
index 13cf1877f9689750272683719eda220ffc9278c0..14e3d19fd8b68aaf92ad44584669a850a7fbadc4 100644 (file)
@@ -10,9 +10,4 @@ defmodule Pleroma.Web.ControllerHelper do
     |> put_status(status)
     |> json(json)
   end
-
-  def set_requester_reachable(conn) do
-    with [referer] <- get_req_header(conn, "referer"),
-         do: Pleroma.Instances.set_reachable(referer)
-  end
 end
index a89f16b9497967fa193eb565aa74d7f7f8e17257..e483447ed7fb15bc0b154b3c4cb803c637ed2023 100644 (file)
@@ -15,7 +15,7 @@ defmodule Pleroma.Web.OStatus.OStatusController do
   alias Pleroma.Web.ActivityPub.ActivityPub
 
   plug(Pleroma.Web.FederatingPlug when action in [:salmon_incoming])
-  plug(:set_requester_reachable when action in [:salmon_incoming])
+  plug(Pleroma.Web.Plugs.SetRequesterReachablePlug when action in [:salmon_incoming])
 
   action_fallback(:errors)
 
@@ -203,9 +203,4 @@ defmodule Pleroma.Web.OStatus.OStatusController do
     |> put_status(500)
     |> text("Something went wrong")
   end
-
-  defp set_requester_reachable(conn, _) do
-    Pleroma.Web.ControllerHelper.set_requester_reachable(conn)
-    conn
-  end
 end
index 17ca7a6e8523c46c2df70c1303e465c2991f773a..80023127c80a768b94c34e86f8f010e7230c9f98 100644 (file)
@@ -168,8 +168,7 @@ defmodule Pleroma.Web.Salmon do
     do: send_to_user(salmon, feed, poster)
 
   def send_to_user(url, feed, poster) when is_binary(url) do
-    with {:reachable, true} <- {:reachable, Instances.reachable?(url)},
-         {:ok, %{status: code}} when code in 200..299 <-
+    with {:ok, %{status: code}} when code in 200..299 <-
            poster.(
              url,
              feed,
index cbb7a5ac7f068a716e232c33f56e801c47443d6a..64eba7221e54ed667454219d700261ec33636e9e 100644 (file)
@@ -272,8 +272,7 @@ defmodule Pleroma.Web.Websub do
     signature = sign(secret || "", xml)
     Logger.info(fn -> "Pushing #{topic} to #{callback}" end)
 
-    with {:reachable, true} <- {:reachable, Instances.reachable?(callback)},
-         {:ok, %{status: code}} when code in 200..299 <-
+    with {:ok, %{status: code}} when code in 200..299 <-
            @httpoison.post(
              callback,
              xml,
index 02fe075d753c5c43fcaad005464b950864f17852..9da7e70a1d6ebad14f0275ff89b10e73c67c9789 100644 (file)
@@ -20,7 +20,7 @@ defmodule Pleroma.Web.Websub.WebsubController do
          ]
   )
 
-  plug(:set_requester_reachable when action in [:websub_incoming])
+  plug(Pleroma.Web.Plugs.SetRequesterReachablePlug when action in [:websub_incoming])
 
   def websub_subscription_request(conn, %{"nickname" => nickname} = params) do
     user = User.get_cached_by_nickname(nickname)
@@ -96,9 +96,4 @@ defmodule Pleroma.Web.Websub.WebsubController do
         |> send_resp(500, "Error")
     end
   end
-
-  defp set_requester_reachable(conn, _) do
-    Pleroma.Web.ControllerHelper.set_requester_reachable(conn)
-    conn
-  end
 end
index 4f5915fba125f0901b2dd145c3ef19af6c018912..b527ad7ec3cf83aeb2abc88e6b690caf95aecbac 100644 (file)
@@ -5,7 +5,6 @@ defmodule Pleroma.Repo.Migrations.CreateInstances do
     create table(:instances) do
       add :host, :string
       add :unreachable_since, :naive_datetime
-      add :reachability_checked_at, :naive_datetime
 
       timestamps()
     end