forked from AkkomaGang/akkoma
Merge branch 'bugfix/233-handle-missing-StatusView' into 'develop'
[Pleroma.Web.MastodonAPI.StatusView]: Add fallback on missing handler for status.json Closes #233 See merge request pleroma/pleroma!257
This commit is contained in:
commit
79b1e4465f
2 changed files with 30 additions and 6 deletions
|
@ -282,7 +282,7 @@ def dm_timeline(%{assigns: %{user: user}} = conn, _params) do
|
||||||
def get_status(%{assigns: %{user: user}} = conn, %{"id" => id}) do
|
def get_status(%{assigns: %{user: user}} = conn, %{"id" => id}) do
|
||||||
with %Activity{} = activity <- Repo.get(Activity, id),
|
with %Activity{} = activity <- Repo.get(Activity, id),
|
||||||
true <- ActivityPub.visible_for_user?(activity, user) do
|
true <- ActivityPub.visible_for_user?(activity, user) do
|
||||||
render(conn, StatusView, "status.json", %{activity: activity, for: user})
|
try_render(conn, StatusView, "status.json", %{activity: activity, for: user})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -345,7 +345,7 @@ def post_status(%{assigns: %{user: user}} = conn, %{"status" => _} = params) do
|
||||||
{:ok, activity} =
|
{:ok, activity} =
|
||||||
Cachex.fetch!(:idempotency_cache, idempotency_key, fn _ -> CommonAPI.post(user, params) end)
|
Cachex.fetch!(:idempotency_cache, idempotency_key, fn _ -> CommonAPI.post(user, params) end)
|
||||||
|
|
||||||
render(conn, StatusView, "status.json", %{activity: activity, for: user, as: :activity})
|
try_render(conn, StatusView, "status.json", %{activity: activity, for: user, as: :activity})
|
||||||
end
|
end
|
||||||
|
|
||||||
def delete_status(%{assigns: %{user: user}} = conn, %{"id" => id}) do
|
def delete_status(%{assigns: %{user: user}} = conn, %{"id" => id}) do
|
||||||
|
@ -361,28 +361,28 @@ def delete_status(%{assigns: %{user: user}} = conn, %{"id" => id}) do
|
||||||
|
|
||||||
def reblog_status(%{assigns: %{user: user}} = conn, %{"id" => ap_id_or_id}) do
|
def reblog_status(%{assigns: %{user: user}} = conn, %{"id" => ap_id_or_id}) do
|
||||||
with {:ok, announce, _activity} <- CommonAPI.repeat(ap_id_or_id, user) do
|
with {:ok, announce, _activity} <- CommonAPI.repeat(ap_id_or_id, user) do
|
||||||
render(conn, StatusView, "status.json", %{activity: announce, for: user, as: :activity})
|
try_render(conn, StatusView, "status.json", %{activity: announce, for: user, as: :activity})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def unreblog_status(%{assigns: %{user: user}} = conn, %{"id" => ap_id_or_id}) do
|
def unreblog_status(%{assigns: %{user: user}} = conn, %{"id" => ap_id_or_id}) do
|
||||||
with {:ok, _unannounce, %{data: %{"id" => id}}} <- CommonAPI.unrepeat(ap_id_or_id, user),
|
with {:ok, _unannounce, %{data: %{"id" => id}}} <- CommonAPI.unrepeat(ap_id_or_id, user),
|
||||||
%Activity{} = activity <- Activity.get_create_activity_by_object_ap_id(id) do
|
%Activity{} = activity <- Activity.get_create_activity_by_object_ap_id(id) do
|
||||||
render(conn, StatusView, "status.json", %{activity: activity, for: user, as: :activity})
|
try_render(conn, StatusView, "status.json", %{activity: activity, for: user, as: :activity})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def fav_status(%{assigns: %{user: user}} = conn, %{"id" => ap_id_or_id}) do
|
def fav_status(%{assigns: %{user: user}} = conn, %{"id" => ap_id_or_id}) do
|
||||||
with {:ok, _fav, %{data: %{"id" => id}}} <- CommonAPI.favorite(ap_id_or_id, user),
|
with {:ok, _fav, %{data: %{"id" => id}}} <- CommonAPI.favorite(ap_id_or_id, user),
|
||||||
%Activity{} = activity <- Activity.get_create_activity_by_object_ap_id(id) do
|
%Activity{} = activity <- Activity.get_create_activity_by_object_ap_id(id) do
|
||||||
render(conn, StatusView, "status.json", %{activity: activity, for: user, as: :activity})
|
try_render(conn, StatusView, "status.json", %{activity: activity, for: user, as: :activity})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def unfav_status(%{assigns: %{user: user}} = conn, %{"id" => ap_id_or_id}) do
|
def unfav_status(%{assigns: %{user: user}} = conn, %{"id" => ap_id_or_id}) do
|
||||||
with {:ok, _, _, %{data: %{"id" => id}}} <- CommonAPI.unfavorite(ap_id_or_id, user),
|
with {:ok, _, _, %{data: %{"id" => id}}} <- CommonAPI.unfavorite(ap_id_or_id, user),
|
||||||
%Activity{} = activity <- Activity.get_create_activity_by_object_ap_id(id) do
|
%Activity{} = activity <- Activity.get_create_activity_by_object_ap_id(id) do
|
||||||
render(conn, StatusView, "status.json", %{activity: activity, for: user, as: :activity})
|
try_render(conn, StatusView, "status.json", %{activity: activity, for: user, as: :activity})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -1202,4 +1202,23 @@ def suggestions(%{assigns: %{user: user}} = conn, _) do
|
||||||
json(conn, [])
|
json(conn, [])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def try_render(conn, renderer, target, params)
|
||||||
|
when is_binary(target) do
|
||||||
|
res = render(conn, renderer, target, params)
|
||||||
|
|
||||||
|
if res == nil do
|
||||||
|
conn
|
||||||
|
|> put_status(501)
|
||||||
|
|> json(%{error: "Can't display this activity"})
|
||||||
|
else
|
||||||
|
res
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def try_render(conn, _, _, _) do
|
||||||
|
conn
|
||||||
|
|> put_status(501)
|
||||||
|
|> json(%{error: "Can't display this activity"})
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -34,6 +34,7 @@ def render("index.json", opts) do
|
||||||
"status.json",
|
"status.json",
|
||||||
Map.put(opts, :replied_to_activities, replied_to_activities)
|
Map.put(opts, :replied_to_activities, replied_to_activities)
|
||||||
)
|
)
|
||||||
|
|> Enum.filter(fn x -> not is_nil(x) end)
|
||||||
end
|
end
|
||||||
|
|
||||||
def render(
|
def render(
|
||||||
|
@ -158,6 +159,10 @@ def render("status.json", %{activity: %{data: %{"object" => object}} = activity}
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def render("status.json", _) do
|
||||||
|
nil
|
||||||
|
end
|
||||||
|
|
||||||
def render("attachment.json", %{attachment: attachment}) do
|
def render("attachment.json", %{attachment: attachment}) do
|
||||||
[attachment_url | _] = attachment["url"]
|
[attachment_url | _] = attachment["url"]
|
||||||
media_type = attachment_url["mediaType"] || attachment_url["mimeType"] || "image"
|
media_type = attachment_url["mediaType"] || attachment_url["mimeType"] || "image"
|
||||||
|
|
Loading…
Reference in a new issue