[#2456] Removed support for embedded relationships in account view.
This commit is contained in:
parent
ac4250a18c
commit
aee88d11be
10 changed files with 23 additions and 155 deletions
|
@ -22,6 +22,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do
|
||||||
alias Pleroma.Web.ActivityPub.Pipeline
|
alias Pleroma.Web.ActivityPub.Pipeline
|
||||||
alias Pleroma.Web.ActivityPub.Relay
|
alias Pleroma.Web.ActivityPub.Relay
|
||||||
alias Pleroma.Web.ActivityPub.Utils
|
alias Pleroma.Web.ActivityPub.Utils
|
||||||
|
alias Pleroma.Web.AdminAPI
|
||||||
alias Pleroma.Web.AdminAPI.AccountView
|
alias Pleroma.Web.AdminAPI.AccountView
|
||||||
alias Pleroma.Web.AdminAPI.ConfigView
|
alias Pleroma.Web.AdminAPI.ConfigView
|
||||||
alias Pleroma.Web.AdminAPI.ModerationLogView
|
alias Pleroma.Web.AdminAPI.ModerationLogView
|
||||||
|
@ -31,7 +32,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do
|
||||||
alias Pleroma.Web.CommonAPI
|
alias Pleroma.Web.CommonAPI
|
||||||
alias Pleroma.Web.Endpoint
|
alias Pleroma.Web.Endpoint
|
||||||
alias Pleroma.Web.MastodonAPI.AppView
|
alias Pleroma.Web.MastodonAPI.AppView
|
||||||
alias Pleroma.Web.MastodonAPI.StatusView
|
alias Pleroma.Web.MastodonAPI
|
||||||
alias Pleroma.Web.OAuth.App
|
alias Pleroma.Web.OAuth.App
|
||||||
alias Pleroma.Web.Router
|
alias Pleroma.Web.Router
|
||||||
|
|
||||||
|
@ -280,7 +281,7 @@ def list_instance_statuses(conn, %{"instance" => instance} = params) do
|
||||||
})
|
})
|
||||||
|
|
||||||
conn
|
conn
|
||||||
|> put_view(Pleroma.Web.AdminAPI.StatusView)
|
|> put_view(AdminAPI.StatusView)
|
||||||
|> render("index.json", %{activities: activities, as: :activity})
|
|> render("index.json", %{activities: activities, as: :activity})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -299,7 +300,7 @@ def list_user_statuses(conn, %{"nickname" => nickname} = params) do
|
||||||
})
|
})
|
||||||
|
|
||||||
conn
|
conn
|
||||||
|> put_view(StatusView)
|
|> put_view(MastodonAPI.StatusView)
|
||||||
|> render("index.json", %{activities: activities, as: :activity})
|
|> render("index.json", %{activities: activities, as: :activity})
|
||||||
else
|
else
|
||||||
_ -> {:error, :not_found}
|
_ -> {:error, :not_found}
|
||||||
|
@ -829,14 +830,14 @@ def list_statuses(%{assigns: %{user: _admin}} = conn, params) do
|
||||||
})
|
})
|
||||||
|
|
||||||
conn
|
conn
|
||||||
|> put_view(Pleroma.Web.AdminAPI.StatusView)
|
|> put_view(AdminAPI.StatusView)
|
||||||
|> render("index.json", %{activities: activities, as: :activity})
|
|> render("index.json", %{activities: activities, as: :activity})
|
||||||
end
|
end
|
||||||
|
|
||||||
def status_show(conn, %{"id" => id}) do
|
def status_show(conn, %{"id" => id}) do
|
||||||
with %Activity{} = activity <- Activity.get_by_id(id) do
|
with %Activity{} = activity <- Activity.get_by_id(id) do
|
||||||
conn
|
conn
|
||||||
|> put_view(StatusView)
|
|> put_view(MastodonAPI.StatusView)
|
||||||
|> render("show.json", %{activity: activity})
|
|> render("show.json", %{activity: activity})
|
||||||
else
|
else
|
||||||
_ -> errors(conn, {:error, :not_found})
|
_ -> errors(conn, {:error, :not_found})
|
||||||
|
@ -856,7 +857,7 @@ def status_update(%{assigns: %{user: admin}} = conn, %{"id" => id} = params) do
|
||||||
})
|
})
|
||||||
|
|
||||||
conn
|
conn
|
||||||
|> put_view(StatusView)
|
|> put_view(MastodonAPI.StatusView)
|
||||||
|> render("show.json", %{activity: activity})
|
|> render("show.json", %{activity: activity})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -122,7 +122,7 @@ def render("create-error.json", %{changeset: %Ecto.Changeset{changes: changes, e
|
||||||
end
|
end
|
||||||
|
|
||||||
def merge_account_views(%User{} = user) do
|
def merge_account_views(%User{} = user) do
|
||||||
MastodonAPI.AccountView.render("show.json", %{user: user, skip_relationships: true})
|
MastodonAPI.AccountView.render("show.json", %{user: user})
|
||||||
|> Map.merge(AdminAPI.AccountView.render("show.json", %{user: user}))
|
|> Map.merge(AdminAPI.AccountView.render("show.json", %{user: user}))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -22,12 +22,7 @@ def handle_in("new_msg", %{"text" => text}, %{assigns: %{user_name: user_name}}
|
||||||
|
|
||||||
if String.length(text) in 1..Pleroma.Config.get([:instance, :chat_limit]) do
|
if String.length(text) in 1..Pleroma.Config.get([:instance, :chat_limit]) do
|
||||||
author = User.get_cached_by_nickname(user_name)
|
author = User.get_cached_by_nickname(user_name)
|
||||||
|
author = Pleroma.Web.MastodonAPI.AccountView.render("show.json", user: author)
|
||||||
author =
|
|
||||||
Pleroma.Web.MastodonAPI.AccountView.render("show.json",
|
|
||||||
user: author,
|
|
||||||
skip_relationships: true
|
|
||||||
)
|
|
||||||
|
|
||||||
message = ChatChannelState.add_message(%{text: text, author: author})
|
message = ChatChannelState.add_message(%{text: text, author: author})
|
||||||
|
|
||||||
|
|
|
@ -86,8 +86,7 @@ defp resource_search(_, "accounts", query, options) do
|
||||||
AccountView.render("index.json",
|
AccountView.render("index.json",
|
||||||
users: accounts,
|
users: accounts,
|
||||||
for: options[:for_user],
|
for: options[:for_user],
|
||||||
as: :user,
|
as: :user
|
||||||
skip_relationships: true
|
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -12,33 +12,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do
|
||||||
alias Pleroma.Web.MastodonAPI.AccountView
|
alias Pleroma.Web.MastodonAPI.AccountView
|
||||||
alias Pleroma.Web.MediaProxy
|
alias Pleroma.Web.MediaProxy
|
||||||
|
|
||||||
# Default behaviour for account view is to include embedded relationships
|
|
||||||
# (e.g. when accounts are rendered on their own [e.g. a list of search results], not as
|
|
||||||
# embedded content in notifications / statuses).
|
|
||||||
# This option must be explicitly set to false when rendering accounts as embedded content.
|
|
||||||
defp initialize_skip_relationships(opts) do
|
|
||||||
Map.merge(%{skip_relationships: false}, opts)
|
|
||||||
end
|
|
||||||
|
|
||||||
def render("index.json", %{users: users} = opts) do
|
def render("index.json", %{users: users} = opts) do
|
||||||
opts = initialize_skip_relationships(opts)
|
|
||||||
|
|
||||||
reading_user = opts[:for]
|
|
||||||
|
|
||||||
relationships_opt =
|
|
||||||
cond do
|
|
||||||
Map.has_key?(opts, :relationships) ->
|
|
||||||
opts[:relationships]
|
|
||||||
|
|
||||||
is_nil(reading_user) || opts[:skip_relationships] ->
|
|
||||||
UserRelationship.view_relationships_option(nil, [])
|
|
||||||
|
|
||||||
true ->
|
|
||||||
UserRelationship.view_relationships_option(reading_user, users)
|
|
||||||
end
|
|
||||||
|
|
||||||
opts = Map.put(opts, :relationships, relationships_opt)
|
|
||||||
|
|
||||||
users
|
users
|
||||||
|> render_many(AccountView, "show.json", opts)
|
|> render_many(AccountView, "show.json", opts)
|
||||||
|> Enum.filter(&Enum.any?/1)
|
|> Enum.filter(&Enum.any?/1)
|
||||||
|
@ -169,8 +143,6 @@ def render("relationships.json", %{user: user, targets: targets} = opts) do
|
||||||
end
|
end
|
||||||
|
|
||||||
defp do_render("show.json", %{user: user} = opts) do
|
defp do_render("show.json", %{user: user} = opts) do
|
||||||
opts = initialize_skip_relationships(opts)
|
|
||||||
|
|
||||||
user = User.sanitize_html(user, User.html_filter_policy(opts[:for]))
|
user = User.sanitize_html(user, User.html_filter_policy(opts[:for]))
|
||||||
display_name = user.name || user.nickname
|
display_name = user.name || user.nickname
|
||||||
|
|
||||||
|
@ -203,17 +175,6 @@ defp do_render("show.json", %{user: user} = opts) do
|
||||||
}
|
}
|
||||||
end)
|
end)
|
||||||
|
|
||||||
relationship =
|
|
||||||
if opts[:skip_relationships] do
|
|
||||||
%{}
|
|
||||||
else
|
|
||||||
render("relationship.json", %{
|
|
||||||
user: opts[:for],
|
|
||||||
target: user,
|
|
||||||
relationships: opts[:relationships]
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
%{
|
%{
|
||||||
id: to_string(user.id),
|
id: to_string(user.id),
|
||||||
username: username_from_nickname(user.nickname),
|
username: username_from_nickname(user.nickname),
|
||||||
|
@ -252,7 +213,7 @@ defp do_render("show.json", %{user: user} = opts) do
|
||||||
hide_followers: user.hide_followers,
|
hide_followers: user.hide_followers,
|
||||||
hide_follows: user.hide_follows,
|
hide_follows: user.hide_follows,
|
||||||
hide_favorites: user.hide_favorites,
|
hide_favorites: user.hide_favorites,
|
||||||
relationship: relationship,
|
relationship: %{},
|
||||||
skip_thread_containment: user.skip_thread_containment,
|
skip_thread_containment: user.skip_thread_containment,
|
||||||
background_image: image_url(user.background) |> MediaProxy.url()
|
background_image: image_url(user.background) |> MediaProxy.url()
|
||||||
}
|
}
|
||||||
|
|
|
@ -84,12 +84,10 @@ def render(
|
||||||
# Note: :relationships contain user mutes (needed for :muted flag in :status)
|
# Note: :relationships contain user mutes (needed for :muted flag in :status)
|
||||||
status_render_opts = %{relationships: opts[:relationships]}
|
status_render_opts = %{relationships: opts[:relationships]}
|
||||||
|
|
||||||
account_render_opts = %{skip_relationships: true}
|
|
||||||
|
|
||||||
with %{id: _} = account <-
|
with %{id: _} = account <-
|
||||||
AccountView.render(
|
AccountView.render(
|
||||||
"show.json",
|
"show.json",
|
||||||
Map.merge(account_render_opts, %{user: actor, for: reading_user})
|
%{user: actor, for: reading_user}
|
||||||
) do
|
) do
|
||||||
response = %{
|
response = %{
|
||||||
id: to_string(notification.id),
|
id: to_string(notification.id),
|
||||||
|
@ -112,7 +110,7 @@ def render(
|
||||||
put_status(response, parent_activity_fn.(), reading_user, status_render_opts)
|
put_status(response, parent_activity_fn.(), reading_user, status_render_opts)
|
||||||
|
|
||||||
"move" ->
|
"move" ->
|
||||||
put_target(response, activity, reading_user, account_render_opts)
|
put_target(response, activity, reading_user, %{})
|
||||||
|
|
||||||
"pleroma:emoji_reaction" ->
|
"pleroma:emoji_reaction" ->
|
||||||
response
|
response
|
||||||
|
|
|
@ -160,8 +160,7 @@ def render(
|
||||||
account:
|
account:
|
||||||
AccountView.render("show.json", %{
|
AccountView.render("show.json", %{
|
||||||
user: user,
|
user: user,
|
||||||
for: opts[:for],
|
for: opts[:for]
|
||||||
skip_relationships: true
|
|
||||||
}),
|
}),
|
||||||
in_reply_to_id: nil,
|
in_reply_to_id: nil,
|
||||||
in_reply_to_account_id: nil,
|
in_reply_to_account_id: nil,
|
||||||
|
@ -327,8 +326,7 @@ def render("show.json", %{activity: %{data: %{"object" => _object}} = activity}
|
||||||
account:
|
account:
|
||||||
AccountView.render("show.json", %{
|
AccountView.render("show.json", %{
|
||||||
user: user,
|
user: user,
|
||||||
for: opts[:for],
|
for: opts[:for]
|
||||||
skip_relationships: true
|
|
||||||
}),
|
}),
|
||||||
in_reply_to_id: reply_to && to_string(reply_to.id),
|
in_reply_to_id: reply_to && to_string(reply_to.id),
|
||||||
in_reply_to_account_id: reply_to_user && to_string(reply_to_user.id),
|
in_reply_to_account_id: reply_to_user && to_string(reply_to_user.id),
|
||||||
|
|
|
@ -73,8 +73,7 @@ def emoji_reactions_by(%{assigns: %{user: user}} = conn, %{"id" => activity_id}
|
||||||
AccountView.render("index.json", %{
|
AccountView.render("index.json", %{
|
||||||
users: users,
|
users: users,
|
||||||
for: user,
|
for: user,
|
||||||
as: :user,
|
as: :user
|
||||||
skip_relationships: true
|
|
||||||
}),
|
}),
|
||||||
me: !!(user && user.ap_id in user_ap_ids)
|
me: !!(user && user.ap_id in user_ap_ids)
|
||||||
}
|
}
|
||||||
|
|
|
@ -295,82 +295,6 @@ test "represent a relationship for the user with a pending follow request" do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
test "represent an embedded relationship" do
|
|
||||||
user =
|
|
||||||
insert(:user, %{
|
|
||||||
follower_count: 0,
|
|
||||||
note_count: 5,
|
|
||||||
actor_type: "Service",
|
|
||||||
nickname: "shp@shitposter.club",
|
|
||||||
inserted_at: ~N[2017-08-15 15:47:06.597036]
|
|
||||||
})
|
|
||||||
|
|
||||||
other_user = insert(:user)
|
|
||||||
{:ok, other_user} = User.follow(other_user, user)
|
|
||||||
{:ok, _user_relationship} = User.block(other_user, user)
|
|
||||||
{:ok, _} = User.follow(insert(:user), user)
|
|
||||||
|
|
||||||
expected = %{
|
|
||||||
id: to_string(user.id),
|
|
||||||
username: "shp",
|
|
||||||
acct: user.nickname,
|
|
||||||
display_name: user.name,
|
|
||||||
locked: false,
|
|
||||||
created_at: "2017-08-15T15:47:06.000Z",
|
|
||||||
followers_count: 1,
|
|
||||||
following_count: 0,
|
|
||||||
statuses_count: 5,
|
|
||||||
note: user.bio,
|
|
||||||
url: user.ap_id,
|
|
||||||
avatar: "http://localhost:4001/images/avi.png",
|
|
||||||
avatar_static: "http://localhost:4001/images/avi.png",
|
|
||||||
header: "http://localhost:4001/images/banner.png",
|
|
||||||
header_static: "http://localhost:4001/images/banner.png",
|
|
||||||
emojis: [],
|
|
||||||
fields: [],
|
|
||||||
bot: true,
|
|
||||||
source: %{
|
|
||||||
note: user.bio,
|
|
||||||
sensitive: false,
|
|
||||||
pleroma: %{
|
|
||||||
actor_type: "Service",
|
|
||||||
discoverable: false
|
|
||||||
},
|
|
||||||
fields: []
|
|
||||||
},
|
|
||||||
pleroma: %{
|
|
||||||
background_image: nil,
|
|
||||||
confirmation_pending: false,
|
|
||||||
tags: [],
|
|
||||||
is_admin: false,
|
|
||||||
is_moderator: false,
|
|
||||||
hide_favorites: true,
|
|
||||||
hide_followers: false,
|
|
||||||
hide_follows: false,
|
|
||||||
hide_followers_count: false,
|
|
||||||
hide_follows_count: false,
|
|
||||||
relationship: %{
|
|
||||||
id: to_string(user.id),
|
|
||||||
following: false,
|
|
||||||
followed_by: false,
|
|
||||||
blocking: true,
|
|
||||||
blocked_by: false,
|
|
||||||
subscribing: false,
|
|
||||||
muting: false,
|
|
||||||
muting_notifications: false,
|
|
||||||
requested: false,
|
|
||||||
domain_blocking: false,
|
|
||||||
showing_reblogs: true,
|
|
||||||
endorsed: false
|
|
||||||
},
|
|
||||||
skip_thread_containment: false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
assert expected ==
|
|
||||||
AccountView.render("show.json", %{user: refresh_record(user), for: other_user})
|
|
||||||
end
|
|
||||||
|
|
||||||
test "returns the settings store if the requesting user is the represented user and it's requested specifically" do
|
test "returns the settings store if the requesting user is the represented user and it's requested specifically" do
|
||||||
user = insert(:user, pleroma_settings_store: %{fe: "test"})
|
user = insert(:user, pleroma_settings_store: %{fe: "test"})
|
||||||
|
|
||||||
|
|
|
@ -45,8 +45,7 @@ test "Mention notification" do
|
||||||
account:
|
account:
|
||||||
AccountView.render("show.json", %{
|
AccountView.render("show.json", %{
|
||||||
user: user,
|
user: user,
|
||||||
for: mentioned_user,
|
for: mentioned_user
|
||||||
skip_relationships: true
|
|
||||||
}),
|
}),
|
||||||
status: StatusView.render("show.json", %{activity: activity, for: mentioned_user}),
|
status: StatusView.render("show.json", %{activity: activity, for: mentioned_user}),
|
||||||
created_at: Utils.to_masto_date(notification.inserted_at)
|
created_at: Utils.to_masto_date(notification.inserted_at)
|
||||||
|
@ -67,8 +66,7 @@ test "Favourite notification" do
|
||||||
id: to_string(notification.id),
|
id: to_string(notification.id),
|
||||||
pleroma: %{is_seen: false},
|
pleroma: %{is_seen: false},
|
||||||
type: "favourite",
|
type: "favourite",
|
||||||
account:
|
account: AccountView.render("show.json", %{user: another_user, for: user}),
|
||||||
AccountView.render("show.json", %{user: another_user, for: user, skip_relationships: true}),
|
|
||||||
status: StatusView.render("show.json", %{activity: create_activity, for: user}),
|
status: StatusView.render("show.json", %{activity: create_activity, for: user}),
|
||||||
created_at: Utils.to_masto_date(notification.inserted_at)
|
created_at: Utils.to_masto_date(notification.inserted_at)
|
||||||
}
|
}
|
||||||
|
@ -88,8 +86,7 @@ test "Reblog notification" do
|
||||||
id: to_string(notification.id),
|
id: to_string(notification.id),
|
||||||
pleroma: %{is_seen: false},
|
pleroma: %{is_seen: false},
|
||||||
type: "reblog",
|
type: "reblog",
|
||||||
account:
|
account: AccountView.render("show.json", %{user: another_user, for: user}),
|
||||||
AccountView.render("show.json", %{user: another_user, for: user, skip_relationships: true}),
|
|
||||||
status: StatusView.render("show.json", %{activity: reblog_activity, for: user}),
|
status: StatusView.render("show.json", %{activity: reblog_activity, for: user}),
|
||||||
created_at: Utils.to_masto_date(notification.inserted_at)
|
created_at: Utils.to_masto_date(notification.inserted_at)
|
||||||
}
|
}
|
||||||
|
@ -107,8 +104,7 @@ test "Follow notification" do
|
||||||
id: to_string(notification.id),
|
id: to_string(notification.id),
|
||||||
pleroma: %{is_seen: false},
|
pleroma: %{is_seen: false},
|
||||||
type: "follow",
|
type: "follow",
|
||||||
account:
|
account: AccountView.render("show.json", %{user: follower, for: followed}),
|
||||||
AccountView.render("show.json", %{user: follower, for: followed, skip_relationships: true}),
|
|
||||||
created_at: Utils.to_masto_date(notification.inserted_at)
|
created_at: Utils.to_masto_date(notification.inserted_at)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -151,10 +147,8 @@ test "Move notification" do
|
||||||
id: to_string(notification.id),
|
id: to_string(notification.id),
|
||||||
pleroma: %{is_seen: false},
|
pleroma: %{is_seen: false},
|
||||||
type: "move",
|
type: "move",
|
||||||
account:
|
account: AccountView.render("show.json", %{user: old_user, for: follower}),
|
||||||
AccountView.render("show.json", %{user: old_user, for: follower, skip_relationships: true}),
|
target: AccountView.render("show.json", %{user: new_user, for: follower}),
|
||||||
target:
|
|
||||||
AccountView.render("show.json", %{user: new_user, for: follower, skip_relationships: true}),
|
|
||||||
created_at: Utils.to_masto_date(notification.inserted_at)
|
created_at: Utils.to_masto_date(notification.inserted_at)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -179,8 +173,7 @@ test "EmojiReact notification" do
|
||||||
pleroma: %{is_seen: false},
|
pleroma: %{is_seen: false},
|
||||||
type: "pleroma:emoji_reaction",
|
type: "pleroma:emoji_reaction",
|
||||||
emoji: "☕",
|
emoji: "☕",
|
||||||
account:
|
account: AccountView.render("show.json", %{user: other_user, for: user}),
|
||||||
AccountView.render("show.json", %{user: other_user, for: user, skip_relationships: true}),
|
|
||||||
status: StatusView.render("show.json", %{activity: activity, for: user}),
|
status: StatusView.render("show.json", %{activity: activity, for: user}),
|
||||||
created_at: Utils.to_masto_date(notification.inserted_at)
|
created_at: Utils.to_masto_date(notification.inserted_at)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue