diff options
| -rw-r--r-- | lib/mix/tasks/relay_follow.ex | 12 | ||||
| -rw-r--r-- | lib/mix/tasks/relay_unfollow.ex | 12 | ||||
| -rw-r--r-- | lib/pleroma/web/activity_pub/relay.ex | 28 | 
3 files changed, 52 insertions, 0 deletions
| diff --git a/lib/mix/tasks/relay_follow.ex b/lib/mix/tasks/relay_follow.ex new file mode 100644 index 000000000..a8152d96f --- /dev/null +++ b/lib/mix/tasks/relay_follow.ex @@ -0,0 +1,12 @@ +defmodule Mix.Tasks.RelayFollow do +  use Mix.Task +  require Logger +  alias Pleroma.Web.ActivityPub.Relay + +  @shortdoc "Follows a remote relay" +  def run([target]) do +    Mix.Task.run("app.start") + +    :ok = Relay.follow(target) +  end +end diff --git a/lib/mix/tasks/relay_unfollow.ex b/lib/mix/tasks/relay_unfollow.ex new file mode 100644 index 000000000..81b7197b2 --- /dev/null +++ b/lib/mix/tasks/relay_unfollow.ex @@ -0,0 +1,12 @@ +defmodule Mix.Tasks.RelayUnfollow do +  use Mix.Task +  require Logger +  alias Pleroma.Web.ActivityPub.Relay + +  @shortdoc "Follows a remote relay" +  def run([target]) do +    Mix.Task.run("app.start") + +    :ok = Relay.unfollow(target) +  end +end diff --git a/lib/pleroma/web/activity_pub/relay.ex b/lib/pleroma/web/activity_pub/relay.ex index 736d0e406..8b49188fb 100644 --- a/lib/pleroma/web/activity_pub/relay.ex +++ b/lib/pleroma/web/activity_pub/relay.ex @@ -1,7 +1,35 @@  defmodule Pleroma.Web.ActivityPub.Relay do    alias Pleroma.User +  alias Pleroma.Web.ActivityPub.ActivityPub +  require Logger    def get_actor do      User.get_or_create_instance_user()    end + +  def follow(target_instance) do +    with %User{} = local_user <- get_actor(), +         %User{} = target_user <- User.get_or_fetch_by_ap_id(target_instance), +         {:ok, activity} <- ActivityPub.follow(local_user, target_user) do +      ActivityPub.publish(local_user, activity) +      Logger.info("relay: followed instance: #{target_instance}; id=#{activity.data["id"]}") +    else +      e -> Logger.error("error: #{inspect(e)}") +    end + +    :ok +  end + +  def unfollow(target_instance) do +    with %User{} = local_user <- get_actor(), +         %User{} = target_user <- User.get_or_fetch_by_ap_id(target_instance), +         {:ok, activity} <- ActivityPub.unfollow(local_user, target_user) do +      ActivityPub.publish(local_user, activity) +      Logger.info("relay: unfollowed instance: #{target_instance}: id=#{activity.data["id"]}") +    else +      e -> Logger.error("error: #{inspect(e)}") +    end + +    :ok +  end  end | 
