From ffc9d7708b3917a3a853cd54c13bbd6d0b3b9ba6 Mon Sep 17 00:00:00 2001 From: Roger Braun Date: Fri, 23 Jun 2017 16:37:34 +0200 Subject: [PATCH] Handle webpubs in queue. --- lib/pleroma/web/federator/federator.ex | 15 +++++++++++++++ lib/pleroma/web/websub/websub.ex | 20 +++++++------------- 2 files changed, 22 insertions(+), 13 deletions(-) diff --git a/lib/pleroma/web/federator/federator.ex b/lib/pleroma/web/federator/federator.ex index 3e99f0d5d..8d4f497b8 100644 --- 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 @@ def handle(:incoming_doc, doc) 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 index a5309ebd9..932bf1862 100644 --- a/lib/pleroma/web/websub/websub.ex +++ b/lib/pleroma/web/websub/websub.ex @@ -49,19 +49,13 @@ def publish(topic, user, activity) 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