Merge branch 'hotfix/delete-activities' into 'develop'
[akkoma] / lib / pleroma / plugs / http_signature.ex
index 8b9ccdd2d7c3be5f9a0ae38d3c1a436f66586cbd..21c1957135c0e5542847e7e2e4aa58682e5972b2 100644 (file)
@@ -1,4 +1,9 @@
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
+# SPDX-License-Identifier: AGPL-3.0-only
+
 defmodule Pleroma.Web.Plugs.HTTPSignaturePlug do
+  alias Pleroma.Web.ActivityPub.Utils
   alias Pleroma.Web.HTTPSignatures
   import Plug.Conn
   require Logger
@@ -7,17 +12,19 @@ defmodule Pleroma.Web.Plugs.HTTPSignaturePlug do
     options
   end
 
-  def call(%{assigns: %{valid_signature: true}} = conn, opts) do
+  def call(%{assigns: %{valid_signature: true}} = conn, _opts) do
     conn
   end
 
-  def call(conn, opts) do
-    user = conn.params["actor"]
+  def call(conn, _opts) do
+    user = Utils.get_ap_id(conn.params["actor"])
     Logger.debug("Checking sig for #{user}")
     [signature | _] = get_req_header(conn, "signature")
 
     cond do
       signature && String.contains?(signature, user) ->
+        # set (request-target) header to the appropriate value
+        # we also replace the digest header with the one we computed
         conn =
           conn
           |> put_req_header(
@@ -25,6 +32,14 @@ defmodule Pleroma.Web.Plugs.HTTPSignaturePlug do
             String.downcase("#{conn.method}") <> " #{conn.request_path}"
           )
 
+        conn =
+          if conn.assigns[:digest] do
+            conn
+            |> put_req_header("digest", conn.assigns[:digest])
+          else
+            conn
+          end
+
         assign(conn, :valid_signature, HTTPSignatures.validate_conn(conn))
 
       signature ->