+ def route_aliases(%{path_info: ["objects", id], query_string: query_string}) do
+ ap_id = Router.Helpers.o_status_url(Pleroma.Web.Endpoint, :object, id)
+
+ with %Activity{} = activity <- Activity.get_by_object_ap_id_with_object(ap_id) do
+ ["/notice/#{activity.id}", "/notice/#{activity.id}?#{query_string}"]
+ else
+ _ -> []
+ end
+ end
+
+ def route_aliases(_), do: []
+
+ defp assign_valid_signature_on_route_aliases(conn, []), do: conn
+
+ defp assign_valid_signature_on_route_aliases(%{assigns: %{valid_signature: true}} = conn, _),
+ do: conn
+
+ defp assign_valid_signature_on_route_aliases(conn, [path | rest]) do
+ request_target = String.downcase("#{conn.method}") <> " #{path}"
+
+ conn =
+ conn
+ |> put_req_header("(request-target)", request_target)
+ |> case do
+ %{assigns: %{digest: digest}} = conn -> put_req_header(conn, "digest", digest)
+ conn -> conn
+ end
+
+ conn
+ |> assign(:valid_signature, HTTPSignatures.validate_conn(conn))
+ |> assign(:signature_actor_id, signature_host(conn))
+ |> assign_valid_signature_on_route_aliases(rest)
+ end
+