ActivityPub MRF: implement the SimplePolicy policy
[akkoma] / lib / pleroma / plugs / http_signature.ex
index af160f3ee4fe3ec979795e32f12eb14c830bfa3f..8b9ccdd2d7c3be5f9a0ae38d3c1a436f66586cbd 100644 (file)
@@ -14,19 +14,26 @@ defmodule Pleroma.Web.Plugs.HTTPSignaturePlug do
   def call(conn, opts) do
     user = conn.params["actor"]
     Logger.debug("Checking sig for #{user}")
+    [signature | _] = get_req_header(conn, "signature")
 
-    if get_req_header(conn, "signature") do
-      conn =
-        conn
-        |> put_req_header(
-          "(request-target)",
-          String.downcase("#{conn.method}") <> " #{conn.request_path}"
-        )
+    cond do
+      signature && String.contains?(signature, user) ->
+        conn =
+          conn
+          |> put_req_header(
+            "(request-target)",
+            String.downcase("#{conn.method}") <> " #{conn.request_path}"
+          )
+
+        assign(conn, :valid_signature, HTTPSignatures.validate_conn(conn))
 
-      assign(conn, :valid_signature, HTTPSignatures.validate_conn(conn))
-    else
-      Logger.debug("No signature header!")
-      conn
+      signature ->
+        Logger.debug("Signature not from actor")
+        assign(conn, :valid_signature, false)
+
+      true ->
+        Logger.debug("No signature header!")
+        conn
     end
   end
 end