forked from AkkomaGang/akkoma
Support pagination in conversations
This commit is contained in:
parent
fbf02a3722
commit
4a2538967c
4 changed files with 26 additions and 6 deletions
|
@ -18,6 +18,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
||||||
- Mastodon API: Support for `include_types` in `/api/v1/notifications`.
|
- Mastodon API: Support for `include_types` in `/api/v1/notifications`.
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Support pagination in conversations API
|
||||||
|
|
||||||
## [2.0.0] - 2019-03-08
|
## [2.0.0] - 2019-03-08
|
||||||
### Security
|
### Security
|
||||||
- Mastodon API: Fix being able to request enourmous amount of statuses in timelines leading to DoS. Now limited to 40 per request.
|
- Mastodon API: Fix being able to request enourmous amount of statuses in timelines leading to DoS. Now limited to 40 per request.
|
||||||
|
|
|
@ -696,7 +696,7 @@ def move(%User{} = origin, %User{} = target, local \\ true) do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
defp fetch_activities_for_context_query(context, opts) do
|
def fetch_activities_for_context_query(context, opts) do
|
||||||
public = [Constants.as_public()]
|
public = [Constants.as_public()]
|
||||||
|
|
||||||
recipients =
|
recipients =
|
||||||
|
|
|
@ -110,12 +110,11 @@ def conversation(%{assigns: %{user: user}} = conn, %{"id" => participation_id})
|
||||||
end
|
end
|
||||||
|
|
||||||
def conversation_statuses(
|
def conversation_statuses(
|
||||||
%{assigns: %{user: user}} = conn,
|
%{assigns: %{user: %{id: user_id} = user}} = conn,
|
||||||
%{"id" => participation_id} = params
|
%{"id" => participation_id} = params
|
||||||
) do
|
) do
|
||||||
with %Participation{} = participation <-
|
with %Participation{user_id: ^user_id} = participation <-
|
||||||
Participation.get(participation_id, preload: [:conversation]),
|
Participation.get(participation_id, preload: [:conversation]) do
|
||||||
true <- user.id == participation.user_id do
|
|
||||||
params =
|
params =
|
||||||
params
|
params
|
||||||
|> Map.put("blocking_user", user)
|
|> Map.put("blocking_user", user)
|
||||||
|
@ -124,7 +123,8 @@ def conversation_statuses(
|
||||||
|
|
||||||
activities =
|
activities =
|
||||||
participation.conversation.ap_id
|
participation.conversation.ap_id
|
||||||
|> ActivityPub.fetch_activities_for_context(params)
|
|> ActivityPub.fetch_activities_for_context_query(params)
|
||||||
|
|> Pleroma.Pagination.fetch_paginated(Map.put(params, "total", false))
|
||||||
|> Enum.reverse()
|
|> Enum.reverse()
|
||||||
|
|
||||||
conn
|
conn
|
||||||
|
|
|
@ -169,6 +169,23 @@ test "/api/v1/pleroma/conversations/:id/statuses" do
|
||||||
id_one = activity.id
|
id_one = activity.id
|
||||||
id_two = activity_two.id
|
id_two = activity_two.id
|
||||||
assert [%{"id" => ^id_one}, %{"id" => ^id_two}] = result
|
assert [%{"id" => ^id_one}, %{"id" => ^id_two}] = result
|
||||||
|
|
||||||
|
{:ok, %{id: id_three}} =
|
||||||
|
CommonAPI.post(other_user, %{
|
||||||
|
"status" => "Bye!",
|
||||||
|
"in_reply_to_status_id" => activity.id,
|
||||||
|
"in_reply_to_conversation_id" => participation.id
|
||||||
|
})
|
||||||
|
|
||||||
|
assert [%{"id" => ^id_two}, %{"id" => ^id_three}] =
|
||||||
|
conn
|
||||||
|
|> get("/api/v1/pleroma/conversations/#{participation.id}/statuses?limit=2")
|
||||||
|
|> json_response(:ok)
|
||||||
|
|
||||||
|
assert [%{"id" => ^id_three}] =
|
||||||
|
conn
|
||||||
|
|> get("/api/v1/pleroma/conversations/#{participation.id}/statuses?min_id=#{id_two}")
|
||||||
|
|> json_response(:ok)
|
||||||
end
|
end
|
||||||
|
|
||||||
test "PATCH /api/v1/pleroma/conversations/:id" do
|
test "PATCH /api/v1/pleroma/conversations/:id" do
|
||||||
|
|
Loading…
Reference in a new issue