[Web.ActivityPub.ActivityPub]: Fix restrict_tag()

Thanks to Senko-san <kurisu@iscute.moe> for the help on array-matching
This commit is contained in:
Haelwenn (lanodan) Monnier 2018-12-21 18:24:13 +01:00
parent f9cae0d04f
commit 1a9bb4daa0
No known key found for this signature in database
GPG Key ID: D5B7A8E43C997DEE
1 changed files with 28 additions and 5 deletions

View File

@ -426,18 +426,41 @@ defp restrict_since(query, %{"since_id" => since_id}) 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}) do
defp restrict_tag(query, %{"tag" => tag}) when is_list(tag) do
from(
activity in query,
where: fragment("? && jsonb_array_elements_text((? #> '{\"object\",\"tag\"}'))", ^tag, activity.data)
where:
fragment(
"? && ARRAY(SELECT jsonb_array_elements_text((? #> '{\"object\",\"tag\"}')))",
^tag,
activity.data
)
)
end
defp restrict_tag(query, %{"tag" => tag}) when is_binary(tag) do
from(
activity in query,
where: fragment("? <@ (? #> '{\"object\",\"tag\"}')", ^tag, activity.data)
)
end