|
|
@@ -49,7 +49,8 @@ defmodule Pleroma.Web.ActivityPub.Publisher do |
|
|
|
""" |
|
|
|
def publish_one(%{inbox: inbox, json: json, actor: %User{} = actor, id: id} = params) do |
|
|
|
Logger.debug("Federating #{id} to #{inbox}") |
|
|
|
%{host: host, path: path} = URI.parse(inbox) |
|
|
|
|
|
|
|
uri = URI.parse(inbox) |
|
|
|
|
|
|
|
digest = "SHA-256=" <> (:crypto.hash(:sha256, json) |> Base.encode64()) |
|
|
|
|
|
|
@@ -57,8 +58,8 @@ defmodule Pleroma.Web.ActivityPub.Publisher do |
|
|
|
|
|
|
|
signature = |
|
|
|
Pleroma.Signature.sign(actor, %{ |
|
|
|
"(request-target)": "post #{path}", |
|
|
|
host: host, |
|
|
|
"(request-target)": "post #{uri.path}", |
|
|
|
host: signature_host(uri), |
|
|
|
"content-length": byte_size(json), |
|
|
|
digest: digest, |
|
|
|
date: date |
|
|
@@ -76,8 +77,9 @@ defmodule Pleroma.Web.ActivityPub.Publisher do |
|
|
|
{"digest", digest} |
|
|
|
] |
|
|
|
) do |
|
|
|
if !Map.has_key?(params, :unreachable_since) || params[:unreachable_since], |
|
|
|
do: Instances.set_reachable(inbox) |
|
|
|
if not Map.has_key?(params, :unreachable_since) || params[:unreachable_since] do |
|
|
|
Instances.set_reachable(inbox) |
|
|
|
end |
|
|
|
|
|
|
|
result |
|
|
|
else |
|
|
@@ -96,6 +98,14 @@ defmodule Pleroma.Web.ActivityPub.Publisher do |
|
|
|
|> publish_one() |
|
|
|
end |
|
|
|
|
|
|
|
defp signature_host(%URI{port: port, scheme: scheme, host: host}) do |
|
|
|
if port == URI.default_port(scheme) do |
|
|
|
host |
|
|
|
else |
|
|
|
"#{host}:#{port}" |
|
|
|
end |
|
|
|
end |
|
|
|
|
|
|
|
defp should_federate?(inbox, public) do |
|
|
|
if public do |
|
|
|
true |
|
|
|