forked from AkkomaGang/akkoma
relay: add relay follow/unfollow tasks
This commit is contained in:
parent
1c90f88393
commit
99be3d3dcc
3 changed files with 52 additions and 0 deletions
12
lib/mix/tasks/relay_follow.ex
Normal file
12
lib/mix/tasks/relay_follow.ex
Normal file
|
@ -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
|
12
lib/mix/tasks/relay_unfollow.ex
Normal file
12
lib/mix/tasks/relay_unfollow.ex
Normal file
|
@ -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
|
|
@ -1,7 +1,35 @@
|
||||||
defmodule Pleroma.Web.ActivityPub.Relay do
|
defmodule Pleroma.Web.ActivityPub.Relay do
|
||||||
alias Pleroma.User
|
alias Pleroma.User
|
||||||
|
alias Pleroma.Web.ActivityPub.ActivityPub
|
||||||
|
require Logger
|
||||||
|
|
||||||
def get_actor do
|
def get_actor do
|
||||||
User.get_or_create_instance_user()
|
User.get_or_create_instance_user()
|
||||||
end
|
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
|
end
|
||||||
|
|
Loading…
Reference in a new issue