From 2f4b8feeba9e7e1c4d1fc967505b3ed80e314b3c Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Fri, 22 Dec 2023 16:27:46 +0100 Subject: [PATCH] fix(activitypub): refresh NodeInfo metadata straight away when adding a new instance to follow Signed-off-by: Thomas Citharel --- lib/graphql/resolvers/admin.ex | 2 ++ lib/service/workers/refresh_instances.ex | 15 +++++---------- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/lib/graphql/resolvers/admin.ex b/lib/graphql/resolvers/admin.ex index d052d8b09..fd0f81f5a 100644 --- a/lib/graphql/resolvers/admin.ex +++ b/lib/graphql/resolvers/admin.ex @@ -16,6 +16,7 @@ defmodule Mobilizon.GraphQL.Resolvers.Admin do alias Mobilizon.Reports.{Note, Report} alias Mobilizon.Service.Auth.Authenticator alias Mobilizon.Service.Statistics + alias Mobilizon.Service.Workers.RefreshInstances alias Mobilizon.Storage.Page alias Mobilizon.Users.User alias Mobilizon.Web.Email @@ -546,6 +547,7 @@ defmodule Mobilizon.GraphQL.Resolvers.Admin do case Relay.follow(domain) do {:ok, _activity, _follow} -> Instances.refresh() + RefreshInstances.refresh_instance_actor(domain) get_instance(parent, args, resolution) {:error, :follow_pending} -> diff --git a/lib/service/workers/refresh_instances.ex b/lib/service/workers/refresh_instances.ex index 85fd530a1..a1b93cf36 100644 --- a/lib/service/workers/refresh_instances.ex +++ b/lib/service/workers/refresh_instances.ex @@ -20,21 +20,16 @@ defmodule Mobilizon.Service.Workers.RefreshInstances do Instances.refresh() Instances.all_domains() - |> Enum.each(&refresh_instance_actor/1) + |> Enum.each(fn %Instance{domain: domain} -> refresh_instance_actor(domain) end) end - @spec refresh_instance_actor(Instance.t()) :: - {:ok, Mobilizon.Actors.Actor.t()} - | {:error, - ActivityPubActor.make_actor_errors() - | Mobilizon.Federation.WebFinger.finger_errors()} - def refresh_instance_actor(%Instance{domain: nil}) do + @spec refresh_instance_actor(String.t() | nil) :: + {:ok, Mobilizon.Actors.Actor.t()} | {:error, Ecto.Changeset.t()} | {:error, atom} + def refresh_instance_actor(nil) do {:error, :not_remote_instance} end - @spec refresh_instance_actor(Instance.t()) :: - {:ok, InstanceActor.t()} | {:error, Ecto.Changeset.t()} | {:error, atom} - def refresh_instance_actor(%Instance{domain: domain}) do + def refresh_instance_actor(domain) do %Actor{url: url} = Relay.get_actor() %URI{host: host} = URI.new!(url)