aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWilliam Pitcock <nenolod@dereferenced.org>2018-08-06 07:14:16 +0000
committerWilliam Pitcock <nenolod@dereferenced.org>2018-08-06 08:22:12 +0000
commit99be3d3dccbbd7877192c6291bbaae92f66e06bf (patch)
treefbc9ece499ca09484e89d76715c7447a614bd064
parent1c90f88393c10198f34aa3a19f09169bcddeeac3 (diff)
downloadpleroma-99be3d3dccbbd7877192c6291bbaae92f66e06bf.tar.gz
relay: add relay follow/unfollow tasks
-rw-r--r--lib/mix/tasks/relay_follow.ex12
-rw-r--r--lib/mix/tasks/relay_unfollow.ex12
-rw-r--r--lib/pleroma/web/activity_pub/relay.ex28
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