aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/pleroma/user.ex19
-rw-r--r--lib/pleroma/web/mastodon_api/controllers/account_controller.ex4
-rw-r--r--lib/pleroma/web/mastodon_api/views/account_view.ex2
-rw-r--r--test/user_test.exs8
4 files changed, 21 insertions, 12 deletions
diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex
index 7a2558c29..5052f7b97 100644
--- a/lib/pleroma/user.ex
+++ b/lib/pleroma/user.ex
@@ -272,7 +272,7 @@ defmodule Pleroma.User do
def account_status(%User{}), do: :active
@spec visible_for(User.t(), User.t() | nil) ::
- boolean()
+ :visible
| :invisible
| :restricted_unauthenticated
| :deactivated
@@ -281,7 +281,7 @@ defmodule Pleroma.User do
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
if restrict_unauthenticated?(user) do
@@ -292,10 +292,14 @@ defmodule Pleroma.User do
end
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
- def visible_for(_, _), do: false
+ def visible_for(_, _), do: :invisible
defp restrict_unauthenticated?(%User{local: local}) do
config_key = if local, do: :local, else: :remote
@@ -305,7 +309,12 @@ defmodule Pleroma.User do
defp visible_account_status(user) do
status = account_status(user)
- status in [:active, :password_reset_pending] || status
+
+ if status in [:active, :password_reset_pending] do
+ :visible
+ else
+ status
+ end
end
@spec superuser?(User.t()) :: boolean()
diff --git a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex
index 1edc0d96a..8727faab7 100644
--- a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex
+++ b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex
@@ -221,7 +221,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do
@doc "GET /api/v1/accounts/:id"
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),
- 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)
else
error -> user_visibility_error(conn, error)
@@ -231,7 +231,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do
@doc "GET /api/v1/accounts/:id/statuses"
def statuses(%{assigns: %{user: reading_user}} = conn, params) do
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
|> Map.delete(:tagged)
diff --git a/lib/pleroma/web/mastodon_api/views/account_view.ex b/lib/pleroma/web/mastodon_api/views/account_view.ex
index 8e723d013..4a1508b22 100644
--- a/lib/pleroma/web/mastodon_api/views/account_view.ex
+++ b/lib/pleroma/web/mastodon_api/views/account_view.ex
@@ -35,7 +35,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do
end
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)
else
%{}
diff --git a/test/user_test.exs b/test/user_test.exs
index 3bfcfd10c..6865bd9be 100644
--- a/test/user_test.exs
+++ b/test/user_test.exs
@@ -1293,7 +1293,7 @@ defmodule Pleroma.UserTest do
test "returns true when the account is itself" do
user = insert(:user, local: true)
- assert User.visible_for(user, user)
+ assert User.visible_for(user, user) == :visible
end
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)
other_user = insert(:user, local: true)
- refute User.visible_for(user, other_user) == true
+ refute User.visible_for(user, other_user) == :visible
end
test "returns true when the account is unauthenticated and auth is not required" do
user = insert(:user, local: true, confirmation_pending: true)
other_user = insert(:user, local: true)
- assert User.visible_for(user, other_user)
+ assert User.visible_for(user, other_user) == :visible
end
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)
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