X-Git-Url: http://git.squeep.com/?a=blobdiff_plain;f=lib%2Fpleroma%2Fuser.ex;h=1e055014ef48f92ecdbaec583b443ba8ed041ac9;hb=c54ae662dcc08c0c04a1dff7bb7a361665e877b8;hp=572dd774612c62469f7fa9dbd3b3f5de344fd7ce;hpb=06d9df79c5c99069dd12e863c99167eb20b6495b;p=akkoma diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 572dd7746..1e055014e 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -51,6 +51,7 @@ defmodule Pleroma.User do 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) @@ -436,7 +437,9 @@ defmodule Pleroma.User do {:error, "Could not follow user: #{followed.nickname} blocked you."} true -> - if !followed.local && follower.local && !ap_enabled?(followed) do + benchmark? = Pleroma.Config.get([:env]) == :benchmark + + if !followed.local && follower.local && !ap_enabled?(followed) && !benchmark? do Websub.subscribe(follower, followed) end @@ -584,7 +587,7 @@ defmodule Pleroma.User do 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) - 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]) -> @@ -847,7 +850,6 @@ defmodule Pleroma.User do unread_query = Participation.unread_conversation_count_for_user(user) User - |> where([u], u.id == ^user.id) |> join(:inner, [u], p in subquery(unread_query)) |> update([u, p], set: [ @@ -859,10 +861,11 @@ defmodule Pleroma.User do ) ] ) + |> where([u], u.id == ^user.id) |> select([u], u) |> Repo.update_all([]) |> case do - {1, [%{info: %User.Info{}} = user]} -> set_cache(user) + {1, [user]} -> set_cache(user) _ -> {:error, user} end end @@ -880,7 +883,7 @@ defmodule Pleroma.User do set: [ info: fragment( - "jsonb_set(?, '{unread_conversation_count}', ((?->>'unread_conversation_count')::int + 1)::varchar::jsonb, true)", + "jsonb_set(?, '{unread_conversation_count}', (coalesce((?->>'unread_conversation_count')::int, 0) + 1)::varchar::jsonb, true)", u.info, u.info ) @@ -891,7 +894,7 @@ defmodule Pleroma.User do |> select([u], u) |> Repo.update_all([]) |> case do - {1, [%{info: %User.Info{}} = user]} -> set_cache(user) + {1, [user]} -> set_cache(user) _ -> {:error, user} end end @@ -1554,11 +1557,14 @@ defmodule Pleroma.User do } end - def ensure_keys_present(%{info: %{keys: keys}} = user) when not is_nil(keys), do: {:ok, user} + 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 - update_info(user, &User.Info.set_keys(&1, pem)) + user + |> cast(%{keys: pem}, [:keys]) + |> validate_required([:keys]) + |> update_and_set_cache() end end