projects
/
akkoma
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
User search: Remove trigram and refactor the module
[akkoma]
/
lib
/
pleroma
/
user.ex
diff --git
a/lib/pleroma/user.ex
b/lib/pleroma/user.ex
index 3aa245f2aa43f60389fc8a8f43023de09a39268e..f0912fb100bfd7ee24d797deafbb6342842fb75a 100644
(file)
--- a/
lib/pleroma/user.ex
+++ b/
lib/pleroma/user.ex
@@
-32,7
+32,7
@@
defmodule Pleroma.User do
@type t :: %__MODULE__{}
@type t :: %__MODULE__{}
- @primary_key {:id,
Pleroma.FlakeId
, autogenerate: true}
+ @primary_key {:id,
FlakeId.Ecto.CompatType
, autogenerate: true}
# credo:disable-for-next-line Credo.Check.Readability.MaxLineLength
@email_regex ~r/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/
# credo:disable-for-next-line Credo.Check.Readability.MaxLineLength
@email_regex ~r/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/
@@
-48,6
+48,7
@@
defmodule Pleroma.User do
field(:password_hash, :string)
field(:password, :string, virtual: true)
field(:password_confirmation, :string, virtual: true)
field(:password_hash, :string)
field(:password, :string, virtual: true)
field(:password_confirmation, :string, virtual: true)
+ field(:keys, :string)
field(:following, {:array, :string}, default: [])
field(:ap_id, :string)
field(:avatar, :map)
field(:following, {:array, :string}, default: [])
field(:ap_id, :string)
field(:avatar, :map)
@@
-573,10
+574,10
@@
defmodule Pleroma.User do
restrict_to_local = Pleroma.Config.get([:instance, :limit_to_local_content])
cond do
restrict_to_local = Pleroma.Config.get([:instance, :limit_to_local_content])
cond do
- is_integer(nickname_or_id) or
Pleroma.FlakeId.is_
flake_id?(nickname_or_id) ->
+ is_integer(nickname_or_id) or
FlakeId.
flake_id?(nickname_or_id) ->
get_cached_by_id(nickname_or_id) || get_cached_by_nickname(nickname_or_id)
get_cached_by_id(nickname_or_id) || get_cached_by_nickname(nickname_or_id)
- restrict_to_local == false ->
+ restrict_to_local == false
or not String.contains?(nickname_or_id, "@")
->
get_cached_by_nickname(nickname_or_id)
restrict_to_local == :unauthenticated and match?(%User{}, opts[:for]) ->
get_cached_by_nickname(nickname_or_id)
restrict_to_local == :unauthenticated and match?(%User{}, opts[:for]) ->
@@
-717,7
+718,7
@@
defmodule Pleroma.User do
set: [
info:
fragment(
set: [
info:
fragment(
- "jsonb_set(?, '{note_count}', ((?->>'note_count')::int + 1)::varchar::jsonb, true)",
+ "
safe_
jsonb_set(?, '{note_count}', ((?->>'note_count')::int + 1)::varchar::jsonb, true)",
u.info,
u.info
)
u.info,
u.info
)
@@
-738,7
+739,7
@@
defmodule Pleroma.User do
set: [
info:
fragment(
set: [
info:
fragment(
- "jsonb_set(?, '{note_count}', (greatest(0, (?->>'note_count')::int - 1))::varchar::jsonb, true)",
+ "
safe_
jsonb_set(?, '{note_count}', (greatest(0, (?->>'note_count')::int - 1))::varchar::jsonb, true)",
u.info,
u.info
)
u.info,
u.info
)
@@
-811,7
+812,7
@@
defmodule Pleroma.User do
set: [
info:
fragment(
set: [
info:
fragment(
- "jsonb_set(?, '{follower_count}', ?::varchar::jsonb, true)",
+ "
safe_
jsonb_set(?, '{follower_count}', ?::varchar::jsonb, true)",
u.info,
s.count
)
u.info,
s.count
)
@@
-1219,7
+1220,7
@@
defmodule Pleroma.User do
def delete_user_activities(%User{ap_id: ap_id} = user) do
ap_id
def delete_user_activities(%User{ap_id: ap_id} = user) do
ap_id
- |> Activity.
query_
by_actor()
+ |> Activity.
Queries.
by_actor()
|> RepoStreamer.chunk_stream(50)
|> Stream.each(fn activities ->
Enum.each(activities, &delete_activity(&1))
|> RepoStreamer.chunk_stream(50)
|> Stream.each(fn activities ->
Enum.each(activities, &delete_activity(&1))
@@
-1590,15
+1591,13
@@
defmodule Pleroma.User do
}
end
}
end
- def ensure_keys_present(%User{info: info} = user) do
- if info.keys do
- {:ok, user}
- else
- {:ok, pem} = Keys.generate_rsa_pem()
+ def ensure_keys_present(%{keys: keys} = user) when not is_nil(keys), do: {:ok, user}
+ def ensure_keys_present(%User{} = user) do
+ with {:ok, pem} <- Keys.generate_rsa_pem() do
user
user
- |>
Ecto.Changeset.change(
)
- |>
Ecto.Changeset.put_embed(:info, User.Info.set_keys(info, pem)
)
+ |>
cast(%{keys: pem}, [:keys]
)
+ |>
validate_required([:keys]
)
|> update_and_set_cache()
end
end
|> update_and_set_cache()
end
end
@@
-1624,4
+1623,13
@@
defmodule Pleroma.User do
def is_internal_user?(%User{nickname: nil}), do: true
def is_internal_user?(%User{local: true, nickname: "internal." <> _}), do: true
def is_internal_user?(_), do: false
def is_internal_user?(%User{nickname: nil}), do: true
def is_internal_user?(%User{local: true, nickname: "internal." <> _}), do: true
def is_internal_user?(_), do: false
+
+ def change_email(user, email) do
+ user
+ |> cast(%{email: email}, [:email])
+ |> validate_required([:email])
+ |> unique_constraint(:email)
+ |> validate_format(:email, @email_regex)
+ |> update_and_set_cache()
+ end
end
end