mapped signature plug: don't invalidate in cases where a signature is actually not...
authorAriadne Conill <ariadne@dereferenced.org>
Thu, 18 Jul 2019 16:01:21 +0000 (16:01 +0000)
committerAriadne Conill <ariadne@dereferenced.org>
Thu, 18 Jul 2019 16:01:21 +0000 (16:01 +0000)
lib/pleroma/plugs/mapped_signature_to_identity_plug.ex

index ae933959541eece36ad7a05a01d7fb109c902925..2a8ed44708b96c3c6952b74bea61e744259279b2 100644 (file)
@@ -36,12 +36,18 @@ defmodule Pleroma.Web.Plugs.MappedSignatureToIdentityPlug do
   # if this has payload make sure it is signed by the same actor that made it
   def call(%{assigns: %{valid_signature: true}, params: %{"actor" => actor}} = conn, _opts) do
     with actor_id <- Utils.get_ap_id(actor),
-         %User{} = user <- user_from_key_id(conn),
-         true <- user.ap_id == actor_id do
+         {:user, %User{} = user} <- {:user, user_from_key_id(conn)},
+         {:user_match, true} <- {:user_match, user.ap_id == actor_id} do
       assign(conn, :mapped_identity, user)
     else
-      _ ->
-        Logger.debug("Failed to map identity from signature (payload actor mismatch?)")
+      {:user_match, false} ->
+        Logger.debug("Failed to map identity from signature (payload actor mismatch)")
+        Logger.debug("key_id=#{key_id_from_conn(conn)}, actor=#{actor}")
+        assign(conn, :valid_signature, false)
+
+      # remove me once testsuite uses mapped capabilities instead of what we do now
+      {:user, nil} ->
+        Logger.debug("Failed to map identity from signature (lookup failure)")
         Logger.debug("key_id=#{key_id_from_conn(conn)}, actor=#{actor}")
         conn
     end
@@ -55,7 +61,7 @@ defmodule Pleroma.Web.Plugs.MappedSignatureToIdentityPlug do
       _ ->
         Logger.debug("Failed to map identity from signature (no payload actor mismatch)")
         Logger.debug("key_id=#{key_id_from_conn(conn)}")
-        conn
+        assign(conn, :valid_signature, false)
     end
   end