diff options
Diffstat (limited to 'lib/pleroma/web/federator/federator.ex')
-rw-r--r-- | lib/pleroma/web/federator/federator.ex | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/lib/pleroma/web/federator/federator.ex b/lib/pleroma/web/federator/federator.ex new file mode 100644 index 000000000..675e804a2 --- /dev/null +++ b/lib/pleroma/web/federator/federator.ex @@ -0,0 +1,38 @@ +defmodule Pleroma.Web.Federator do + alias Pleroma.User + alias Pleroma.Web.WebFinger + require Logger + + @websub Application.get_env(:pleroma, :websub) + + def handle(:publish, activity) do + Logger.debug("Running publish for #{activity.data["id"]}") + with actor when not is_nil(actor) <- User.get_cached_by_ap_id(activity.data["actor"]) do + Logger.debug("Sending #{activity.data["id"]} out via websub") + Pleroma.Web.Websub.publish(Pleroma.Web.OStatus.feed_path(actor), actor, activity) + + {:ok, actor} = WebFinger.ensure_keys_present(actor) + Logger.debug("Sending #{activity.data["id"]} out via salmon") + Pleroma.Web.Salmon.publish(actor, activity) + end + end + + def handle(:verify_websub, websub) do + Logger.debug("Running websub verification for #{websub.id} (#{websub.topic}, #{websub.callback})") + @websub.verify(websub) + end + + def handle(type, payload) do + Logger.debug("Unknown task: #{type}") + {:error, "Don't know what do do with this"} + end + + def enqueue(type, payload) do + # for now, just run immediately in a new process. + if Mix.env == :test do + handle(type, payload) + else + spawn(fn -> handle(type, payload) end) + end + end +end |