diff --git a/lib/clacks/activity.ex b/lib/clacks/activity.ex index e4b9284..7a63798 100644 --- a/lib/clacks/activity.ex +++ b/lib/clacks/activity.ex @@ -60,12 +60,13 @@ defmodule Clacks.Activity do Repo.one(from a in __MODULE__, where: fragment("?->>'id'", a.data) == ^ap_id) end - @spec get_by_object_ap_id(object_id :: String.t()) :: t() | nil - def get_by_object_ap_id(object_id) do + @spec get_by_object_ap_id(object_id :: String.t(), type :: String.t()) :: t() | nil + def get_by_object_ap_id(object_id, type) do __MODULE__ |> where( [a], - fragment("COALESCE(?->'object'->>'id', ?->>'object')", a.data, a.data) == ^object_id + fragment("?->>'type'", a.data) == ^type and + fragment("COALESCE(?->'object'->>'id', ?->>'object')", a.data, a.data) == ^object_id ) |> preload_object() |> Repo.one() diff --git a/lib/clacks/notification.ex b/lib/clacks/notification.ex index a45fc86..0991c8f 100644 --- a/lib/clacks/notification.ex +++ b/lib/clacks/notification.ex @@ -75,7 +75,7 @@ defmodule Clacks.Notification do ) when type in ["Announce", "Like"] do with %Activity{local: true, actor: local_actor_id} <- - Activity.get_by_object_ap_id(original_object_ap_id), + Activity.get_by_object_ap_id(original_object_ap_id, "Create"), %Actor{local: true} = original_activity_actor <- Actor.get_cached_by_ap_id(local_actor_id) do create(String.downcase(type), activity, original_activity_actor) diff --git a/lib/clacks/object.ex b/lib/clacks/object.ex index 1d34a1a..ce27a00 100644 --- a/lib/clacks/object.ex +++ b/lib/clacks/object.ex @@ -74,7 +74,7 @@ defmodule Clacks.Object do _ = Clacks.Actor.get_by_ap_id(actor) activity = - case Clacks.Activity.get_by_object_ap_id(ap_id) do + case Clacks.Activity.get_by_object_ap_id(ap_id, "Create") do nil -> if synthesize_create do create = Clacks.ActivityPub.synthesized_create(data) diff --git a/lib/clacks_web/controllers/objects_controller.ex b/lib/clacks_web/controllers/objects_controller.ex index 5b51baa..19007d7 100644 --- a/lib/clacks_web/controllers/objects_controller.ex +++ b/lib/clacks_web/controllers/objects_controller.ex @@ -32,7 +32,7 @@ defmodule ClacksWeb.ObjectsController do defp redirect_to_status(conn, _params) do object_id = current_url(conn) - case Activity.get_by_object_ap_id(object_id) do + case Activity.get_by_object_ap_id(object_id, "Create") do nil -> conn |> resp(404, "Not Found")