ActivityPub: Add undo for emoji reactions.
[akkoma] / lib / pleroma / plugs / http_signature.ex
index af160f3ee4fe3ec979795e32f12eb14c830bfa3f..23d22a712fcf9839490b9d4cf44de3a370c7cf9b 100644 (file)
@@ -1,5 +1,8 @@
+# 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.HTTPSignatures
   import Plug.Conn
   require Logger
 
@@ -7,15 +10,17 @@ 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"]
-    Logger.debug("Checking sig for #{user}")
+  def call(conn, _opts) do
+    headers = get_req_header(conn, "signature")
+    signature = Enum.at(headers, 0)
 
-    if get_req_header(conn, "signature") do
+    if signature do
+      # set (request-target) header to the appropriate value
+      # we also replace the digest header with the one we computed
       conn =
         conn
         |> put_req_header(
@@ -23,6 +28,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))
     else
       Logger.debug("No signature header!")