forked from AkkomaGang/akkoma
MastoAPI: Fix link headers with restrictive params.
This commit is contained in:
parent
461f201caa
commit
35cb8969c4
1 changed files with 32 additions and 10 deletions
|
@ -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
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue