return :visible instead of boolean

This commit is contained in:
Alexander Strizhakov 2020-05-15 20:29:09 +03:00
parent b1aa402229
commit 1671864d88
No known key found for this signature in database
GPG key ID: 022896A53AEF1381
4 changed files with 21 additions and 12 deletions

View file

@ -272,7 +272,7 @@ defmodule Pleroma.User do
def account_status(%User{}), do: :active def account_status(%User{}), do: :active
@spec visible_for(User.t(), User.t() | nil) :: @spec visible_for(User.t(), User.t() | nil) ::
boolean() :visible
| :invisible | :invisible
| :restricted_unauthenticated | :restricted_unauthenticated
| :deactivated | :deactivated
@ -281,7 +281,7 @@ defmodule Pleroma.User do
def visible_for(%User{invisible: true}, _), do: :invisible def visible_for(%User{invisible: true}, _), do: :invisible
def visible_for(%User{id: user_id}, %User{id: user_id}), do: true def visible_for(%User{id: user_id}, %User{id: user_id}), do: :visible
def visible_for(%User{} = user, nil) do def visible_for(%User{} = user, nil) do
if restrict_unauthenticated?(user) do if restrict_unauthenticated?(user) do
@ -292,10 +292,14 @@ defmodule Pleroma.User do
end end
def visible_for(%User{} = user, for_user) do def visible_for(%User{} = user, for_user) do
superuser?(for_user) || visible_account_status(user) if superuser?(for_user) do
:visible
else
visible_account_status(user)
end
end end
def visible_for(_, _), do: false def visible_for(_, _), do: :invisible
defp restrict_unauthenticated?(%User{local: local}) do defp restrict_unauthenticated?(%User{local: local}) do
config_key = if local, do: :local, else: :remote config_key = if local, do: :local, else: :remote
@ -305,7 +309,12 @@ defmodule Pleroma.User do
defp visible_account_status(user) do defp visible_account_status(user) do
status = account_status(user) status = account_status(user)
status in [:active, :password_reset_pending] || status
if status in [:active, :password_reset_pending] do
:visible
else
status
end
end end
@spec superuser?(User.t()) :: boolean() @spec superuser?(User.t()) :: boolean()

View file

@ -221,7 +221,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do
@doc "GET /api/v1/accounts/:id" @doc "GET /api/v1/accounts/:id"
def show(%{assigns: %{user: for_user}} = conn, %{id: nickname_or_id}) do def show(%{assigns: %{user: for_user}} = conn, %{id: nickname_or_id}) do
with %User{} = user <- User.get_cached_by_nickname_or_id(nickname_or_id, for: for_user), with %User{} = user <- User.get_cached_by_nickname_or_id(nickname_or_id, for: for_user),
true <- User.visible_for(user, for_user) do :visible <- User.visible_for(user, for_user) do
render(conn, "show.json", user: user, for: for_user) render(conn, "show.json", user: user, for: for_user)
else else
error -> user_visibility_error(conn, error) error -> user_visibility_error(conn, error)
@ -231,7 +231,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do
@doc "GET /api/v1/accounts/:id/statuses" @doc "GET /api/v1/accounts/:id/statuses"
def statuses(%{assigns: %{user: reading_user}} = conn, params) do def statuses(%{assigns: %{user: reading_user}} = conn, params) do
with %User{} = user <- User.get_cached_by_nickname_or_id(params.id, for: reading_user), with %User{} = user <- User.get_cached_by_nickname_or_id(params.id, for: reading_user),
true <- User.visible_for(user, reading_user) do :visible <- User.visible_for(user, reading_user) do
params = params =
params params
|> Map.delete(:tagged) |> Map.delete(:tagged)

View file

@ -35,7 +35,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do
end end
def render("show.json", %{user: user} = opts) do def render("show.json", %{user: user} = opts) do
if User.visible_for(user, opts[:for]) == true do if User.visible_for(user, opts[:for]) == :visible do
do_render("show.json", opts) do_render("show.json", opts)
else else
%{} %{}

View file

@ -1293,7 +1293,7 @@ defmodule Pleroma.UserTest do
test "returns true when the account is itself" do test "returns true when the account is itself" do
user = insert(:user, local: true) user = insert(:user, local: true)
assert User.visible_for(user, user) assert User.visible_for(user, user) == :visible
end end
test "returns false when the account is unauthenticated and auth is required" do test "returns false when the account is unauthenticated and auth is required" do
@ -1302,14 +1302,14 @@ defmodule Pleroma.UserTest do
user = insert(:user, local: true, confirmation_pending: true) user = insert(:user, local: true, confirmation_pending: true)
other_user = insert(:user, local: true) other_user = insert(:user, local: true)
refute User.visible_for(user, other_user) == true refute User.visible_for(user, other_user) == :visible
end end
test "returns true when the account is unauthenticated and auth is not required" do test "returns true when the account is unauthenticated and auth is not required" do
user = insert(:user, local: true, confirmation_pending: true) user = insert(:user, local: true, confirmation_pending: true)
other_user = insert(:user, local: true) other_user = insert(:user, local: true)
assert User.visible_for(user, other_user) assert User.visible_for(user, other_user) == :visible
end end
test "returns true when the account is unauthenticated and being viewed by a privileged account (auth required)" do test "returns true when the account is unauthenticated and being viewed by a privileged account (auth required)" do
@ -1318,7 +1318,7 @@ defmodule Pleroma.UserTest do
user = insert(:user, local: true, confirmation_pending: true) user = insert(:user, local: true, confirmation_pending: true)
other_user = insert(:user, local: true, is_admin: true) other_user = insert(:user, local: true, is_admin: true)
assert User.visible_for(user, other_user) assert User.visible_for(user, other_user) == :visible
end end
end end