diff options
author | Egor Kislitsyn <egor@kislitsyn.com> | 2019-01-09 16:56:31 +0700 |
---|---|---|
committer | Egor Kislitsyn <egor@kislitsyn.com> | 2019-01-09 16:56:31 +0700 |
commit | 48591aab980d92823b51d2363fcd4b64d311739a (patch) | |
tree | 0bceebfbc8e96c7999683168b62b1e4f88272625 /lib | |
parent | 0c750bc432a6329be7f0dc15707e46625b11faf3 (diff) | |
parent | 5c5c8508c203886f32b150e7d8c1f7362a4fde0e (diff) | |
download | pleroma-48591aab980d92823b51d2363fcd4b64d311739a.tar.gz |
Merge branch 'develop' of git.pleroma.social:pleroma/pleroma into feature/pinned-posts
# Conflicts:
# docs/config.md
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pleroma/user.ex | 47 | ||||
-rw-r--r-- | lib/pleroma/user/info.ex | 2 |
2 files changed, 36 insertions, 13 deletions
diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 85d0f9fce..7c2849ce2 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -44,20 +44,28 @@ defmodule Pleroma.User do timestamps() end - def auth_active?(%User{} = user) do - (user.info && !user.info.confirmation_pending) || - !Pleroma.Config.get([:instance, :account_activation_required]) - end + def auth_active?(%User{local: false}), do: true + + def auth_active?(%User{info: %User.Info{confirmation_pending: false}}), do: true + + def auth_active?(%User{info: %User.Info{confirmation_pending: true}}), + do: !Pleroma.Config.get([:instance, :account_activation_required]) - def remote_or_auth_active?(%User{} = user), do: !user.local || auth_active?(user) + def auth_active?(_), do: false - def visible_for?(%User{} = user, for_user \\ nil) do - User.remote_or_auth_active?(user) || (for_user && for_user.id == user.id) || - User.superuser?(for_user) + def visible_for?(user, for_user \\ nil) + + def visible_for?(%User{id: user_id}, %User{id: for_id}) when user_id == for_id, do: true + + def visible_for?(%User{} = user, for_user) do + auth_active?(user) || superuser?(for_user) end - def superuser?(nil), do: false - def superuser?(%User{} = user), do: user.info && User.Info.superuser?(user.info) + def visible_for?(_, _), do: false + + def superuser?(%User{local: true, info: %User.Info{is_admin: true}}), do: true + def superuser?(%User{local: true, info: %User.Info{is_moderator: true}}), do: true + def superuser?(_), do: false def avatar_url(user) do case user.avatar do @@ -229,10 +237,27 @@ defmodule Pleroma.User do end end + defp autofollow_users(user) do + candidates = Pleroma.Config.get([:instance, :autofollowed_nicknames]) + + autofollowed_users = + from(u in User, + where: u.local == true, + where: u.nickname in ^candidates + ) + |> Repo.all() + + autofollowed_users + |> Enum.reduce({:ok, user}, fn other_user, {:ok, user} -> + follow(user, other_user) + end) + end + @doc "Inserts provided changeset, performs post-registration actions (confirmation email sending etc.)" def register(%Ecto.Changeset{} = changeset) do with {:ok, user} <- Repo.insert(changeset), - {:ok, _} = try_send_confirmation_email(user) do + {:ok, _} <- try_send_confirmation_email(user), + {:ok, user} <- autofollow_users(user) do {:ok, user} end end diff --git a/lib/pleroma/user/info.ex b/lib/pleroma/user/info.ex index 8ac50540d..fb1791c20 100644 --- a/lib/pleroma/user/info.ex +++ b/lib/pleroma/user/info.ex @@ -42,8 +42,6 @@ defmodule Pleroma.User.Info do # subject _> Where is this used? end - def superuser?(info), do: info.is_admin || info.is_moderator - def set_activation_status(info, deactivated) do params = %{deactivated: deactivated} |