projects
/
akkoma
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'feature/delete-validator' into 'develop'
[akkoma]
/
lib
/
pleroma
/
user
/
query.ex
diff --git
a/lib/pleroma/user/query.ex
b/lib/pleroma/user/query.ex
index f32def4f56d08bb0a59990e09dfbafb573ddcae3..3a3b047934d98e872ae4eb008a78e5237135048d 100644
(file)
--- a/
lib/pleroma/user/query.ex
+++ b/
lib/pleroma/user/query.ex
@@
-1,5
+1,5
@@
# Pleroma: A lightweight social networking server
# Pleroma: A lightweight social networking server
-# Copyright © 2017-20
19
Pleroma Authors <https://pleroma.social/>
+# Copyright © 2017-20
20
Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.User.Query do
# SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.User.Query do
@@
-45,23
+45,23
@@
defmodule Pleroma.User.Query do
is_admin: boolean(),
is_moderator: boolean(),
super_users: boolean(),
is_admin: boolean(),
is_moderator: boolean(),
super_users: boolean(),
+ exclude_service_users: boolean(),
followers: User.t(),
friends: User.t(),
recipients_from_activity: [String.t()],
followers: User.t(),
friends: User.t(),
recipients_from_activity: [String.t()],
- nickname: [String.t()],
+ nickname: [String.t()]
| String.t()
,
ap_id: [String.t()],
order_by: term(),
select: term(),
limit: pos_integer()
}
ap_id: [String.t()],
order_by: term(),
select: term(),
limit: pos_integer()
}
- |
%{}
+ |
map()
@ilike_criteria [:nickname, :name, :query]
@equal_criteria [:email]
@ilike_criteria [:nickname, :name, :query]
@equal_criteria [:email]
- @role_criteria [:is_admin, :is_moderator]
@contains_criteria [:ap_id, :nickname]
@contains_criteria [:ap_id, :nickname]
- @spec build(criteria()) :: Query.t()
+ @spec build(
Query.t(),
criteria()) :: Query.t()
def build(query \\ base_query(), criteria) do
prepare_query(query, criteria)
end
def build(query \\ base_query(), criteria) do
prepare_query(query, criteria)
end
@@
-89,6
+89,10
@@
defmodule Pleroma.User.Query do
where(query, [u], ilike(field(u, ^key), ^"%#{value}%"))
end
where(query, [u], ilike(field(u, ^key), ^"%#{value}%"))
end
+ defp compose_query({:exclude_service_users, _}, query) do
+ where(query, [u], not like(u.ap_id, "%/relay") and not like(u.ap_id, "%/internal/fetch"))
+ end
+
defp compose_query({key, value}, query)
when key in @equal_criteria and not_empty_string(value) do
where(query, [u], ^[{key, value}])
defp compose_query({key, value}, query)
when key in @equal_criteria and not_empty_string(value) do
where(query, [u], ^[{key, value}])
@@
-99,18
+103,22
@@
defmodule Pleroma.User.Query do
end
defp compose_query({:tags, tags}, query) when is_list(tags) and length(tags) > 0 do
end
defp compose_query({:tags, tags}, query) when is_list(tags) and length(tags) > 0 do
- Enum.reduce(tags, query, &prepare_tag_criteria/2)
+ where(query, [u], fragment("? && ?", u.tags, ^tags))
+ end
+
+ defp compose_query({:is_admin, _}, query) do
+ where(query, [u], u.is_admin)
end
end
- defp compose_query({
key, _}, query) when key in @role_criteria
do
- where(query, [u],
fragment("(?->? @> 'true')", u.info, ^to_string(key))
)
+ defp compose_query({
:is_moderator, _}, query)
do
+ where(query, [u],
u.is_moderator
)
end
defp compose_query({:super_users, _}, query) do
where(
query,
[u],
end
defp compose_query({:super_users, _}, query) do
where(
query,
[u],
- fragment("?->'is_admin' @> 'true' OR ?->'is_moderator' @> 'true'", u.info, u.info)
+ u.is_admin or u.is_moderator
)
end
)
end
@@
-119,7
+127,13
@@
defmodule Pleroma.User.Query do
defp compose_query({:external, _}, query), do: location_query(query, false)
defp compose_query({:active, _}, query) do
defp compose_query({:external, _}, query), do: location_query(query, false)
defp compose_query({:active, _}, query) do
- where(query, [u], fragment("not (?->'deactivated' @> 'true')", u.info))
+ User.restrict_deactivated(query)
+ |> where([u], not is_nil(u.nickname))
+ end
+
+ defp compose_query({:legacy_active, _}, query) do
+ query
+ |> where([u], fragment("not (?->'deactivated' @> 'true')", u.info))
|> where([u], not is_nil(u.nickname))
end
|> where([u], not is_nil(u.nickname))
end
@@
-128,7
+142,7
@@
defmodule Pleroma.User.Query do
end
defp compose_query({:deactivated, true}, query) do
end
defp compose_query({:deactivated, true}, query) do
- where(query, [u],
fragment("?->'deactivated' @> 'true'", u.info)
)
+ where(query, [u],
u.deactivated == ^true
)
|> where([u], not is_nil(u.nickname))
end
|> where([u], not is_nil(u.nickname))
end
@@
-139,7
+153,7
@@
defmodule Pleroma.User.Query do
as: :relationships,
on: r.following_id == ^id and r.follower_id == u.id
)
as: :relationships,
on: r.following_id == ^id and r.follower_id == u.id
)
- |> where([relationships: r], r.state ==
"accept"
)
+ |> where([relationships: r], r.state ==
^:follow_accept
)
end
defp compose_query({:friends, %User{id: id}}, query) do
end
defp compose_query({:friends, %User{id: id}}, query) do
@@
-149,7
+163,7
@@
defmodule Pleroma.User.Query do
as: :relationships,
on: r.following_id == u.id and r.follower_id == ^id
)
as: :relationships,
on: r.following_id == u.id and r.follower_id == ^id
)
- |> where([relationships: r], r.state ==
"accept"
)
+ |> where([relationships: r], r.state ==
^:follow_accept
)
end
defp compose_query({:recipients_from_activity, to}, query) do
end
defp compose_query({:recipients_from_activity, to}, query) do
@@
-164,8
+178,9
@@
defmodule Pleroma.User.Query do
)
|> where(
[u, following: f, relationships: r],
)
|> where(
[u, following: f, relationships: r],
- u.ap_id in ^to or (f.follower_address in ^to and r.state ==
"accept"
)
+ u.ap_id in ^to or (f.follower_address in ^to and r.state ==
^:follow_accept
)
)
)
+ |> distinct(true)
end
defp compose_query({:order_by, key}, query) do
end
defp compose_query({:order_by, key}, query) do
@@
-182,10
+197,6
@@
defmodule Pleroma.User.Query do
defp compose_query(_unsupported_param, query), do: query
defp compose_query(_unsupported_param, query), do: query
- defp prepare_tag_criteria(tag, query) do
- or_where(query, [u], fragment("? = any(?)", ^tag, u.tags))
- end
-
defp location_query(query, local) do
where(query, [u], u.local == ^local)
|> where([u], not is_nil(u.nickname))
defp location_query(query, local) do
where(query, [u], u.local == ^local)
|> where([u], not is_nil(u.nickname))