Page MenuHomePhorge

No OneTemporary

Authored By
Unknown
Size
3 KB
Referenced Files
None
Subscribers
None
diff --git a/lib/pleroma/instances/instance.ex b/lib/pleroma/instances/instance.ex
index 3695e0b75..3d3ef5774 100644
--- a/lib/pleroma/instances/instance.ex
+++ b/lib/pleroma/instances/instance.ex
@@ -91,6 +91,13 @@ defmodule Pleroma.Instances.Instance do
def reachable?(url_or_host) when is_binary(url_or_host), do: true
+ @doc "Creates a record for the instance unless one exists. Existing records are kept."
+ def ensure_exists(url_or_host) when is_binary(url_or_host) do
+ %Instance{host: host(url_or_host)}
+ |> changeset(%{})
+ |> Repo.insert(on_conflict: :nothing, conflict_target: :host)
+ end
+
def set_reachable(url_or_host) when is_binary(url_or_host) do
host = host(url_or_host)
diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex
index b997e7831..a5325d8ec 100644
--- a/lib/pleroma/web/activity_pub/activity_pub.ex
+++ b/lib/pleroma/web/activity_pub/activity_pub.ex
@@ -11,6 +11,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
alias Pleroma.Conversation.Participation
alias Pleroma.Filter
alias Pleroma.Hashtag
+ alias Pleroma.Instances.Instance
alias Pleroma.Maps
alias Pleroma.Notification
alias Pleroma.Object
@@ -2068,10 +2069,11 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
else
maybe_handle_clashing_nickname(data)
- data
- |> User.remote_user_changeset()
- |> Repo.insert()
- |> User.set_cache()
+ with {:ok, user} <- data |> User.remote_user_changeset() |> Repo.insert() do
+ # Keeps the instances table complete, so it can list our peers.
+ Instance.ensure_exists(user.ap_id)
+ User.set_cache({:ok, user})
+ end
end
end
end
diff --git a/test/pleroma/web/activity_pub/activity_pub_test.exs b/test/pleroma/web/activity_pub/activity_pub_test.exs
index c118cd8f1..fcebdffb1 100644
--- a/test/pleroma/web/activity_pub/activity_pub_test.exs
+++ b/test/pleroma/web/activity_pub/activity_pub_test.exs
@@ -184,6 +184,25 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do
assert user.follower_address == "http://mastodon.example.org/users/admin/followers"
end
+ test "it records the user's instance" do
+ refute Repo.get_by(Pleroma.Instances.Instance, host: "mastodon.example.org")
+
+ {:ok, _user} = ActivityPub.make_user_from_ap_id("http://mastodon.example.org/users/admin")
+
+ assert %{unreachable_since: nil} =
+ Repo.get_by(Pleroma.Instances.Instance, host: "mastodon.example.org")
+ end
+
+ test "it keeps an existing instance record" do
+ unreachable_since = ~N[2020-01-01 00:00:00.000000]
+ insert(:instance, host: "mastodon.example.org", unreachable_since: unreachable_since)
+
+ {:ok, _user} = ActivityPub.make_user_from_ap_id("http://mastodon.example.org/users/admin")
+
+ assert %{unreachable_since: ^unreachable_since} =
+ Repo.get_by(Pleroma.Instances.Instance, host: "mastodon.example.org")
+ end
+
test "it returns a user that is invisible" do
user_id = "http://mastodon.example.org/users/relay"
{:ok, user} = ActivityPub.make_user_from_ap_id(user_id)

File Metadata

Mime Type
text/x-diff
Expires
Sat, Oct 31, 3:15 AM (21 h, 20 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1800965
Default Alt Text
(3 KB)

Event Timeline