activitypub: publisher: add (request-target) to http signature when POSTing
authorAriadne Conill <ariadne@dereferenced.org>
Wed, 14 Aug 2019 19:00:48 +0000 (19:00 +0000)
committerAriadne Conill <ariadne@dereferenced.org>
Wed, 14 Aug 2019 19:01:51 +0000 (19:01 +0000)
CHANGELOG.md
lib/pleroma/web/activity_pub/publisher.ex

index 358287096295542b6c177faaf39e9daee4433412..5a6150d98f8925d7c12a10355e0d09f8c80b55b7 100644 (file)
@@ -37,6 +37,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
 - Rich Media: The crawled URL is now spliced into the rich media data.
 - ActivityPub S2S: sharedInbox usage has been mostly aligned with the rules in the AP specification.
 - ActivityPub S2S: remote user deletions now work the same as local user deletions.
+- ActivityPub S2S: POST requests are now signed with `(request-target)` pseudo-header.
 - Not being able to access the Mastodon FE login page on private instances
 - Invalid SemVer version generation, when the current branch does not have commits ahead of tag/checked out on a tag
 - Pleroma.Upload base_url was not automatically whitelisted by MediaProxy. Now your custom CDN or file hosting will be accessed directly as expected.
index 46edab0bd6c9e7144013b18c890d87adf34ef92e..987a253772cebaf54423378d77499bf27c429b58 100644 (file)
@@ -46,7 +46,9 @@ defmodule Pleroma.Web.ActivityPub.Publisher do
   """
   def publish_one(%{inbox: inbox, json: json, actor: %User{} = actor, id: id} = params) do
     Logger.info("Federating #{id} to #{inbox}")
-    host = URI.parse(inbox).host
+    uri = URI.parse(inbox)
+    host = uri.host
+    path = uri.path
 
     digest = "SHA-256=" <> (:crypto.hash(:sha256, json) |> Base.encode64())
 
@@ -56,6 +58,7 @@ defmodule Pleroma.Web.ActivityPub.Publisher do
 
     signature =
       Pleroma.Signature.sign(actor, %{
+        "(request-target)": "post #{path}",
         host: host,
         "content-length": byte_size(json),
         digest: digest,