forked from AkkomaGang/akkoma
Merge branch '471_invalid_accounts_rendering' into 'develop'
[#471] Prevented rendering of inactive local accounts Closes #471 See merge request pleroma/pleroma!599
This commit is contained in:
commit
49cf5f9ce0
3 changed files with 86 additions and 61 deletions
|
@ -47,6 +47,14 @@ def auth_active?(%User{} = user) do
|
||||||
!Pleroma.Config.get([:instance, :account_activation_required])
|
!Pleroma.Config.get([:instance, :account_activation_required])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def remote_or_auth_active?(%User{} = user), do: !user.local || auth_active?(user)
|
||||||
|
|
||||||
|
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)
|
||||||
|
end
|
||||||
|
|
||||||
|
def superuser?(nil), do: false
|
||||||
def superuser?(%User{} = user), do: user.info && User.Info.superuser?(user.info)
|
def superuser?(%User{} = user), do: user.info && User.Info.superuser?(user.info)
|
||||||
|
|
||||||
def avatar_url(user) do
|
def avatar_url(user) do
|
||||||
|
|
|
@ -11,10 +11,55 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do
|
||||||
alias Pleroma.HTML
|
alias Pleroma.HTML
|
||||||
|
|
||||||
def render("accounts.json", %{users: users} = opts) do
|
def render("accounts.json", %{users: users} = opts) do
|
||||||
render_many(users, AccountView, "account.json", opts)
|
users
|
||||||
|
|> render_many(AccountView, "account.json", opts)
|
||||||
|
|> Enum.filter(&Enum.any?/1)
|
||||||
end
|
end
|
||||||
|
|
||||||
def render("account.json", %{user: user} = opts) do
|
def render("account.json", %{user: user} = opts) do
|
||||||
|
if User.visible_for?(user, opts[:for]),
|
||||||
|
do: do_render("account.json", opts),
|
||||||
|
else: %{}
|
||||||
|
end
|
||||||
|
|
||||||
|
def render("mention.json", %{user: user}) do
|
||||||
|
%{
|
||||||
|
id: to_string(user.id),
|
||||||
|
acct: user.nickname,
|
||||||
|
username: username_from_nickname(user.nickname),
|
||||||
|
url: user.ap_id
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
def render("relationship.json", %{user: user, target: target}) do
|
||||||
|
follow_activity = Pleroma.Web.ActivityPub.Utils.fetch_latest_follow(user, target)
|
||||||
|
|
||||||
|
requested =
|
||||||
|
if follow_activity do
|
||||||
|
follow_activity.data["state"] == "pending"
|
||||||
|
else
|
||||||
|
false
|
||||||
|
end
|
||||||
|
|
||||||
|
%{
|
||||||
|
id: to_string(target.id),
|
||||||
|
following: User.following?(user, target),
|
||||||
|
followed_by: User.following?(target, user),
|
||||||
|
blocking: User.blocks?(user, target),
|
||||||
|
muting: false,
|
||||||
|
muting_notifications: false,
|
||||||
|
requested: requested,
|
||||||
|
domain_blocking: false,
|
||||||
|
showing_reblogs: false,
|
||||||
|
endorsed: false
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
def render("relationships.json", %{user: user, targets: targets}) do
|
||||||
|
render_many(targets, AccountView, "relationship.json", user: user, as: :target)
|
||||||
|
end
|
||||||
|
|
||||||
|
defp do_render("account.json", %{user: user} = opts) do
|
||||||
image = User.avatar_url(user) |> MediaProxy.url()
|
image = User.avatar_url(user) |> MediaProxy.url()
|
||||||
header = User.banner_url(user) |> MediaProxy.url()
|
header = User.banner_url(user) |> MediaProxy.url()
|
||||||
user_info = User.user_info(user)
|
user_info = User.user_info(user)
|
||||||
|
@ -72,43 +117,6 @@ def render("account.json", %{user: user} = opts) do
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
def render("mention.json", %{user: user}) do
|
|
||||||
%{
|
|
||||||
id: to_string(user.id),
|
|
||||||
acct: user.nickname,
|
|
||||||
username: username_from_nickname(user.nickname),
|
|
||||||
url: user.ap_id
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
def render("relationship.json", %{user: user, target: target}) do
|
|
||||||
follow_activity = Pleroma.Web.ActivityPub.Utils.fetch_latest_follow(user, target)
|
|
||||||
|
|
||||||
requested =
|
|
||||||
if follow_activity do
|
|
||||||
follow_activity.data["state"] == "pending"
|
|
||||||
else
|
|
||||||
false
|
|
||||||
end
|
|
||||||
|
|
||||||
%{
|
|
||||||
id: to_string(target.id),
|
|
||||||
following: User.following?(user, target),
|
|
||||||
followed_by: User.following?(target, user),
|
|
||||||
blocking: User.blocks?(user, target),
|
|
||||||
muting: false,
|
|
||||||
muting_notifications: false,
|
|
||||||
requested: requested,
|
|
||||||
domain_blocking: false,
|
|
||||||
showing_reblogs: false,
|
|
||||||
endorsed: false
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
def render("relationships.json", %{user: user, targets: targets}) do
|
|
||||||
render_many(targets, AccountView, "relationship.json", user: user, as: :target)
|
|
||||||
end
|
|
||||||
|
|
||||||
defp username_from_nickname(string) when is_binary(string) do
|
defp username_from_nickname(string) when is_binary(string) do
|
||||||
hd(String.split(string, "@"))
|
hd(String.split(string, "@"))
|
||||||
end
|
end
|
||||||
|
|
|
@ -15,18 +15,44 @@ def render("show.json", %{user: user = %User{}} = assigns) do
|
||||||
end
|
end
|
||||||
|
|
||||||
def render("index.json", %{users: users, for: user}) do
|
def render("index.json", %{users: users, for: user}) do
|
||||||
render_many(users, Pleroma.Web.TwitterAPI.UserView, "user.json", for: user)
|
users
|
||||||
|
|> render_many(Pleroma.Web.TwitterAPI.UserView, "user.json", for: user)
|
||||||
|
|> Enum.filter(&Enum.any?/1)
|
||||||
end
|
end
|
||||||
|
|
||||||
def render("user.json", %{user: user = %User{}} = assigns) do
|
def render("user.json", %{user: user = %User{}} = assigns) do
|
||||||
|
if User.visible_for?(user, assigns[:for]),
|
||||||
|
do: do_render("user.json", assigns),
|
||||||
|
else: %{}
|
||||||
|
end
|
||||||
|
|
||||||
|
def render("short.json", %{
|
||||||
|
user: %User{
|
||||||
|
nickname: nickname,
|
||||||
|
id: id,
|
||||||
|
ap_id: ap_id,
|
||||||
|
name: name
|
||||||
|
}
|
||||||
|
}) do
|
||||||
|
%{
|
||||||
|
"fullname" => name,
|
||||||
|
"id" => id,
|
||||||
|
"ostatus_uri" => ap_id,
|
||||||
|
"profile_url" => ap_id,
|
||||||
|
"screen_name" => nickname
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
defp do_render("user.json", %{user: user = %User{}} = assigns) do
|
||||||
|
for_user = assigns[:for]
|
||||||
image = User.avatar_url(user) |> MediaProxy.url()
|
image = User.avatar_url(user) |> MediaProxy.url()
|
||||||
|
|
||||||
{following, follows_you, statusnet_blocking} =
|
{following, follows_you, statusnet_blocking} =
|
||||||
if assigns[:for] do
|
if for_user do
|
||||||
{
|
{
|
||||||
User.following?(assigns[:for], user),
|
User.following?(for_user, user),
|
||||||
User.following?(user, assigns[:for]),
|
User.following?(user, for_user),
|
||||||
User.blocks?(assigns[:for], user)
|
User.blocks?(for_user, user)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{false, false, false}
|
{false, false, false}
|
||||||
|
@ -51,7 +77,7 @@ def render("user.json", %{user: user = %User{}} = assigns) do
|
||||||
data = %{
|
data = %{
|
||||||
"created_at" => user.inserted_at |> Utils.format_naive_asctime(),
|
"created_at" => user.inserted_at |> Utils.format_naive_asctime(),
|
||||||
"description" => HTML.strip_tags((user.bio || "") |> String.replace("<br>", "\n")),
|
"description" => HTML.strip_tags((user.bio || "") |> String.replace("<br>", "\n")),
|
||||||
"description_html" => HTML.filter_tags(user.bio, User.html_filter_policy(assigns[:for])),
|
"description_html" => HTML.filter_tags(user.bio, User.html_filter_policy(for_user)),
|
||||||
"favourites_count" => 0,
|
"favourites_count" => 0,
|
||||||
"followers_count" => user_info[:follower_count],
|
"followers_count" => user_info[:follower_count],
|
||||||
"following" => following,
|
"following" => following,
|
||||||
|
@ -97,23 +123,6 @@ def render("user.json", %{user: user = %User{}} = assigns) do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def render("short.json", %{
|
|
||||||
user: %User{
|
|
||||||
nickname: nickname,
|
|
||||||
id: id,
|
|
||||||
ap_id: ap_id,
|
|
||||||
name: name
|
|
||||||
}
|
|
||||||
}) do
|
|
||||||
%{
|
|
||||||
"fullname" => name,
|
|
||||||
"id" => id,
|
|
||||||
"ostatus_uri" => ap_id,
|
|
||||||
"profile_url" => ap_id,
|
|
||||||
"screen_name" => nickname
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
defp image_url(%{"url" => [%{"href" => href} | _]}), do: href
|
defp image_url(%{"url" => [%{"href" => href} | _]}), do: href
|
||||||
defp image_url(_), do: nil
|
defp image_url(_), do: nil
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue