logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma
commit: ffc9d7708b3917a3a853cd54c13bbd6d0b3b9ba6
parent: 6ee0ca21e2f449e9bf8ef36d37233081ea981b32
Author: Roger Braun <roger@rogerbraun.net>
Date:   Fri, 23 Jun 2017 16:37:34 +0200

Handle webpubs in queue.

Diffstat:

Mlib/pleroma/web/federator/federator.ex15+++++++++++++++
Mlib/pleroma/web/websub/websub.ex20+++++++-------------
2 files changed, 22 insertions(+), 13 deletions(-)

diff --git a/lib/pleroma/web/federator/federator.ex b/lib/pleroma/web/federator/federator.ex @@ -6,6 +6,7 @@ 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 @@ -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"} diff --git a/lib/pleroma/web/websub/websub.ex b/lib/pleroma/web/websub/websub.ex @@ -49,19 +49,13 @@ defmodule Pleroma.Web.Websub do |> :xmerl.export_simple(:xmerl_xml) |> to_string - signature = sign(sub.secret || "", response) - Logger.debug(fn -> "Pushing #{topic} to #{sub.callback}" end) - - Task.start(fn -> - with {:ok, %{status_code: code}} <- @httpoison.post(sub.callback, response, [ - {"Content-Type", "application/atom+xml"}, - {"X-Hub-Signature", "sha1=#{signature}"} - ], timeout: 10000, recv_timeout: 20000) do - Logger.debug(fn -> "Pushed to #{sub.callback}, code #{code}" end) - else e -> - Logger.debug(fn -> "Couldn't push to #{sub.callback}, #{inspect(e)}" end) - end - end) + data = %{ + xml: response, + topic: topic, + callback: sub.callback, + secret: sub.secret + } + Pleroma.Web.Federator.enqueue(:publish_single_websub, data) end) end