aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHaelwenn (lanodan) Monnier <contact@hacktivis.me>2018-12-21 18:24:13 +0100
committerHaelwenn (lanodan) Monnier <contact@hacktivis.me>2019-01-26 04:46:01 +0100
commit1a9bb4daa0df06ac0f3d06ddacec71fa25f64db5 (patch)
tree916f4cf03afed790ded93c34651b1c17b71f8fe5
parentf9cae0d04fe4609f85d800351566080b5a4f34b7 (diff)
downloadpleroma-1a9bb4daa0df06ac0f3d06ddacec71fa25f64db5.tar.gz
[Web.ActivityPub.ActivityPub]: Fix restrict_tag()
Thanks to Senko-san <kurisu@iscute.moe> for the help on array-matching
-rw-r--r--lib/pleroma/web/activity_pub/activity_pub.ex33
1 files changed, 28 insertions, 5 deletions
diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex
index e0d020fab..d414ecc46 100644
--- a/lib/pleroma/web/activity_pub/activity_pub.ex
+++ b/lib/pleroma/web/activity_pub/activity_pub.ex
@@ -426,18 +426,41 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
defp restrict_since(query, _), do: query
- defp restrict_tag(query, %{"tag" => tag, "tag_reject" => tag_reject}) when tag_reject != [] do
+ defp restrict_tag(query, %{"tag" => tag, "tag_reject" => tag_reject})
+ when is_list(tag) and tag_reject != [] do
from(
activity in query,
- where: fragment("? <@ (? #> '{\"object\",\"tag\"}')", ^tag, activity.data),
- where: fragment("? @> (? #> '{\"object\",\"tag\"}')", ^tag_reject, activity.data)
+ where:
+ fragment(
+ "? && ARRAY(SELECT jsonb_array_elements_text((? #> '{\"object\",\"tag\"}')))",
+ ^tag,
+ activity.data
+ ),
+ where:
+ fragment(
+ "(not ? && ARRAY(SELECT jsonb_array_elements_text((? #> '{\"object\",\"tag\"}'))))",
+ ^tag_reject,
+ activity.data
+ )
+ )
+ end
+
+ defp restrict_tag(query, %{"tag" => tag}) when is_list(tag) do
+ from(
+ activity in query,
+ where:
+ fragment(
+ "? && ARRAY(SELECT jsonb_array_elements_text((? #> '{\"object\",\"tag\"}')))",
+ ^tag,
+ activity.data
+ )
)
end
- defp restrict_tag(query, %{"tag" => tag}) do
+ defp restrict_tag(query, %{"tag" => tag}) when is_binary(tag) do
from(
activity in query,
- where: fragment("? && jsonb_array_elements_text((? #> '{\"object\",\"tag\"}'))", ^tag, activity.data)
+ where: fragment("? <@ (? #> '{\"object\",\"tag\"}')", ^tag, activity.data)
)
end