MastoAPI: Fix link headers with restrictive params.

This commit is contained in:
eal 2018-05-29 13:29:51 +03:00
parent 461f201caa
commit 35cb8969c4
1 changed files with 32 additions and 10 deletions

View File

@ -144,7 +144,7 @@ def custom_emojis(conn, _params) do
json(conn, mastodon_emoji) json(conn, mastodon_emoji)
end end
defp add_link_headers(conn, method, activities, param \\ false) do defp add_link_headers(conn, method, activities, param \\ nil, params \\ %{}) do
last = List.last(activities) last = List.last(activities)
first = List.first(activities) first = List.first(activities)
@ -155,13 +155,31 @@ defp add_link_headers(conn, method, activities, param \\ false) do
{next_url, prev_url} = {next_url, prev_url} =
if param do if param do
{ {
mastodon_api_url(Pleroma.Web.Endpoint, method, param, max_id: min), mastodon_api_url(
mastodon_api_url(Pleroma.Web.Endpoint, method, param, since_id: max) Pleroma.Web.Endpoint,
method,
param,
Map.merge(params, %{max_id: min})
),
mastodon_api_url(
Pleroma.Web.Endpoint,
method,
param,
Map.merge(params, %{since_id: max})
)
} }
else else
{ {
mastodon_api_url(Pleroma.Web.Endpoint, method, max_id: min), mastodon_api_url(
mastodon_api_url(Pleroma.Web.Endpoint, method, since_id: max) Pleroma.Web.Endpoint,
method,
Map.merge(params, %{max_id: min})
),
mastodon_api_url(
Pleroma.Web.Endpoint,
method,
Map.merge(params, %{since_id: max})
)
} }
end end
@ -189,10 +207,12 @@ def home_timeline(%{assigns: %{user: user}} = conn, params) do
end end
def public_timeline(%{assigns: %{user: user}} = conn, params) do def public_timeline(%{assigns: %{user: user}} = conn, params) do
local_only = params["local"] in [true, "True", "true", "1"]
params = params =
params params
|> Map.put("type", ["Create", "Announce"]) |> Map.put("type", ["Create", "Announce"])
|> Map.put("local_only", params["local"] in [true, "True", "true", "1"]) |> Map.put("local_only", local_only)
|> Map.put("blocking_user", user) |> Map.put("blocking_user", user)
activities = activities =
@ -200,7 +220,7 @@ def public_timeline(%{assigns: %{user: user}} = conn, params) do
|> Enum.reverse() |> Enum.reverse()
conn conn
|> add_link_headers(:public_timeline, activities) |> add_link_headers(:public_timeline, activities, false, %{"local" => local_only})
|> render(StatusView, "index.json", %{activities: activities, for: user, as: :activity}) |> render(StatusView, "index.json", %{activities: activities, for: user, as: :activity})
end end
@ -225,7 +245,7 @@ def dm_timeline(%{assigns: %{user: user}} = conn, params) do
activities = Repo.all(query) activities = Repo.all(query)
conn conn
|> add_link_headers(:user_statuses, activities, user.ap_id) |> add_link_headers(:dm_timeline, activities)
|> render(StatusView, "index.json", %{activities: activities, for: user, as: :activity}) |> render(StatusView, "index.json", %{activities: activities, for: user, as: :activity})
end end
@ -406,10 +426,12 @@ def reblogged_by(conn, %{"id" => id}) do
end end
def hashtag_timeline(%{assigns: %{user: user}} = conn, params) do def hashtag_timeline(%{assigns: %{user: user}} = conn, params) do
local_only = params["local"] in [true, "True", "true", "1"]
params = params =
params params
|> Map.put("type", "Create") |> Map.put("type", "Create")
|> Map.put("local_only", !!params["local"]) |> Map.put("local_only", local_only)
|> Map.put("blocking_user", user) |> Map.put("blocking_user", user)
activities = activities =
@ -417,7 +439,7 @@ def hashtag_timeline(%{assigns: %{user: user}} = conn, params) do
|> Enum.reverse() |> Enum.reverse()
conn conn
|> add_link_headers(:hashtag_timeline, activities, params["tag"]) |> add_link_headers(:hashtag_timeline, activities, params["tag"], %{"local" => local_only})
|> render(StatusView, "index.json", %{activities: activities, for: user, as: :activity}) |> render(StatusView, "index.json", %{activities: activities, for: user, as: :activity})
end end