projects
/
akkoma
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[#534] Merged `upstream/develop`.
[akkoma]
/
lib
/
pleroma
/
web
/
salmon
/
salmon.ex
diff --git
a/lib/pleroma/web/salmon/salmon.ex
b/lib/pleroma/web/salmon/salmon.ex
index f7d2257eb5f1d4c372946a4627028b80cb5277b5..e96455423a7abac7549e727386bf0ec50882a476 100644
(file)
--- a/
lib/pleroma/web/salmon/salmon.ex
+++ b/
lib/pleroma/web/salmon/salmon.ex
@@
-1,11
+1,12
@@
# Pleroma: A lightweight social networking server
# Pleroma: A lightweight social networking server
-# Copyright © 2017-201
8
Pleroma Authors <https://pleroma.social/>
+# Copyright © 2017-201
9
Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.Web.Salmon do
@httpoison Application.get_env(:pleroma, :httpoison)
use Bitwise
# SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.Web.Salmon do
@httpoison Application.get_env(:pleroma, :httpoison)
use Bitwise
+ alias Pleroma.Instances
alias Pleroma.Web.XML
alias Pleroma.Web.OStatus.ActivityRepresenter
alias Pleroma.User
alias Pleroma.Web.XML
alias Pleroma.Web.OStatus.ActivityRepresenter
alias Pleroma.User
@@
-163,23
+164,31
@@
defmodule Pleroma.Web.Salmon do
# push an activity to remote accounts
#
# push an activity to remote accounts
#
- def
p
send_to_user(%{info: %{salmon: salmon}}, feed, poster),
+ def send_to_user(%{info: %{salmon: salmon}}, feed, poster),
do: send_to_user(salmon, feed, poster)
do: send_to_user(salmon, feed, poster)
- def
p
send_to_user(url, feed, poster) when is_binary(url) do
- with {:ok, %{status: code}} <-
+ def send_to_user(url, feed, poster) when is_binary(url) do
+ with {:ok, %{status: code}}
when code in 200..299
<-
poster.(
url,
feed,
poster.(
url,
feed,
- [{"Content-Type", "application/magic-envelope+xml"}]
+ [
+ {"Content-Type", "application/magic-envelope+xml"},
+ {"referer", Pleroma.Web.Endpoint.url()}
+ ]
) do
) do
+ Instances.set_reachable(url)
Logger.debug(fn -> "Pushed to #{url}, code #{code}" end)
Logger.debug(fn -> "Pushed to #{url}, code #{code}" end)
+ :ok
else
else
- e -> Logger.debug(fn -> "Pushing Salmon to #{url} failed, #{inspect(e)}" end)
+ e ->
+ Instances.set_unreachable(url)
+ Logger.debug(fn -> "Pushing Salmon to #{url} failed, #{inspect(e)}" end)
+ :error
end
end
end
end
- def
p send_to_user(_, _, _), do: nil
+ def
send_to_user(_, _, _), do: :noop
@supported_activities [
"Create",
@supported_activities [
"Create",
@@
-209,12
+218,16
@@
defmodule Pleroma.Web.Salmon do
{:ok, private, _} = keys_from_pem(keys)
{:ok, feed} = encode(private, feed)
{:ok, private, _} = keys_from_pem(keys)
{:ok, feed} = encode(private, feed)
- remote_users(activity)
+ remote_users = remote_users(activity)
+
+ salmon_urls = Enum.map(remote_users, & &1.info.salmon)
+ reachable_salmon_urls = Instances.filter_reachable(salmon_urls)
+
+ remote_users
+ |> Enum.filter(&(&1.info.salmon in reachable_salmon_urls))
|> Enum.each(fn remote_user ->
|> Enum.each(fn remote_user ->
- Task.start(fn ->
- Logger.debug(fn -> "Sending Salmon to #{remote_user.ap_id}" end)
- send_to_user(remote_user, feed, poster)
- end)
+ Logger.debug(fn -> "Sending Salmon to #{remote_user.ap_id}" end)
+ Pleroma.Web.Federator.enqueue(:publish_single_salmon, {remote_user, feed, poster})
end)
end
end
end)
end
end