X-Git-Url: http://git.squeep.com/?a=blobdiff_plain;f=lib%2Fpleroma%2Fweb%2Ffederator%2Ffederator.ex;h=8d4f497b831efe0da5348652459f855995f9429e;hb=ffc9d7708b3917a3a853cd54c13bbd6d0b3b9ba6;hp=fbf6ea6bec95a10258e827d0907a731e05b2d08e;hpb=2e753e8cd740d540eae7badf5c48197d3914b5f5;p=akkoma diff --git a/lib/pleroma/web/federator/federator.ex b/lib/pleroma/web/federator/federator.ex index fbf6ea6be..8d4f497b8 100644 --- a/lib/pleroma/web/federator/federator.ex +++ b/lib/pleroma/web/federator/federator.ex @@ -6,11 +6,12 @@ defmodule Pleroma.Web.Federator do @websub Application.get_env(:pleroma, :websub) @ostatus Application.get_env(:pleroma, :ostatus) + @httpoison Application.get_env(:pleroma, :httpoison) @max_jobs 10 def start_link do spawn(fn -> - Process.sleep(1000 * 60 * 1) # 10 minutes + Process.sleep(1000 * 60 * 1) # 1 minute enqueue(:refresh_subscriptions, nil) end) GenServer.start_link(__MODULE__, {:sets.new(), :queue.new()}, name: __MODULE__) @@ -20,7 +21,7 @@ defmodule Pleroma.Web.Federator do Logger.debug("Federator running refresh subscriptions") Websub.refresh_subscriptions() spawn(fn -> - Process.sleep(1000 * 60 * 60) # 60 minutes + Process.sleep(1000 * 60 * 60 * 6) # 6 hours enqueue(:refresh_subscriptions, nil) end) end @@ -47,6 +48,20 @@ defmodule Pleroma.Web.Federator do @ostatus.handle_incoming(doc) end + def handle(:publish_single_websub, %{xml: xml, topic: topic, callback: callback, secret: secret}) do + signature = @websub.sign(secret || "", xml) + Logger.debug(fn -> "Pushing #{topic} to #{callback}" end) + + with {:ok, %{status_code: code}} <- @httpoison.post(callback, xml, [ + {"Content-Type", "application/atom+xml"}, + {"X-Hub-Signature", "sha1=#{signature}"} + ], timeout: 10000, recv_timeout: 20000) do + Logger.debug(fn -> "Pushed to #{callback}, code #{code}" end) + else e -> + Logger.debug(fn -> "Couldn't push to #{callback}, #{inspect(e)}" end) + end + end + def handle(type, payload) do Logger.debug(fn -> "Unknown task: #{type}" end) {:error, "Don't know what do do with this"}