Strip html from emoji stuff.
[akkoma] / lib / pleroma / web / mastodon_api / mastodon_api_controller.ex
index ca1f8154c69647f110987167690f8d772c829838..c039412547610962114eb7e94357b7d45236fa8e 100644 (file)
@@ -135,14 +135,23 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
     json conn, mastodon_emoji
   end
 
-  defp add_link_headers(conn, method, activities) do
+  defp add_link_headers(conn, method, activities, param \\ false) do
     last = List.last(activities)
     first = List.first(activities)
     if last do
       min = last.id
       max = first.id
-      next_url = mastodon_api_url(Pleroma.Web.Endpoint, method, max_id: min)
-      prev_url = mastodon_api_url(Pleroma.Web.Endpoint, method, since_id: max)
+      {next_url, prev_url} = if param do
+        {
+          mastodon_api_url(Pleroma.Web.Endpoint, method, param, max_id: min),
+          mastodon_api_url(Pleroma.Web.Endpoint, method, param, since_id: max)
+        }
+      else
+        {
+          mastodon_api_url(Pleroma.Web.Endpoint, method, max_id: min),
+          mastodon_api_url(Pleroma.Web.Endpoint, method, since_id: max)
+        }
+      end
       conn
       |> put_resp_header("link", "<#{next_url}>; rel=\"next\", <#{prev_url}>; rel=\"prev\"")
     else
@@ -178,7 +187,6 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
     |> render(StatusView, "index.json", %{activities: activities, for: user, as: :activity})
   end
 
-  # TODO: Link headers
   def user_statuses(%{assigns: %{user: user}} = conn, params) do
     with %User{ap_id: ap_id} <- Repo.get(User, params["id"]) do
       params = params
@@ -189,7 +197,9 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
       activities = ActivityPub.fetch_public_activities(params)
       |> Enum.reverse
 
-      render conn, StatusView, "index.json", %{activities: activities, for: user, as: :activity}
+      conn
+      |> add_link_headers(:user_statuses, activities, params["id"])
+      |> render(StatusView, "index.json", %{activities: activities, for: user, as: :activity})
     end
   end
 
@@ -202,7 +212,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
 
   def get_context(%{assigns: %{user: user}} = conn, %{"id" => id}) do
     with %Activity{} = activity <- Repo.get(Activity, id),
-         activities <- ActivityPub.fetch_activities_for_context(activity.data["object"]["context"], %{"blocking_user" => user, "user" => user}),
+         activities <- ActivityPub.fetch_activities_for_context(activity.data["context"], %{"blocking_user" => user, "user" => user}),
          activities <- activities |> Enum.filter(fn (%{id: aid}) -> to_string(aid) != to_string(id) end),
          activities <- activities |> Enum.filter(fn (%{data: %{"type" => type}}) -> type == "Create" end),
          grouped_activities <- Enum.group_by(activities, fn (%{id: id}) -> id < activity.id end) do
@@ -333,7 +343,6 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
     end
   end
 
-  # TODO: Link headers
   def hashtag_timeline(%{assigns: %{user: user}} = conn, params) do
     params = params
     |> Map.put("type", "Create")
@@ -344,6 +353,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
     |> Enum.reverse
 
     conn
+    |> add_link_headers(:hashtag_timeline, activities, params["tag"])
     |> render(StatusView, "index.json", %{activities: activities, for: user, as: :activity})
   end
 
@@ -614,6 +624,11 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
     json(conn, [])
   end
 
+  def empty_object(conn, _) do
+    Logger.debug("Unimplemented, returning an empty object")
+    json(conn, %{})
+  end
+
   def render_notification(user, %{id: id, activity: activity, inserted_at: created_at} = _params) do
     actor = User.get_cached_by_ap_id(activity.data["actor"])
     created_at = NaiveDateTime.to_iso8601(created_at)