1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
5 defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
6 use Pleroma.Web, :controller
8 import Pleroma.Web.ControllerHelper, only: [add_link_headers: 2]
10 alias Pleroma.Bookmark
11 alias Pleroma.Pagination
13 alias Pleroma.Web.ActivityPub.ActivityPub
14 alias Pleroma.Web.MastodonAPI.AccountView
15 alias Pleroma.Web.MastodonAPI.StatusView
19 action_fallback(Pleroma.Web.MastodonAPI.FallbackController)
21 def favourites(%{assigns: %{user: user}} = conn, params) do
24 |> Map.put("type", "Create")
25 |> Map.put("favorited_by", user.ap_id)
26 |> Map.put("blocking_user", user)
29 ActivityPub.fetch_activities([], params)
33 |> add_link_headers(activities)
34 |> put_view(StatusView)
35 |> render("index.json", %{activities: activities, for: user, as: :activity})
38 def bookmarks(%{assigns: %{user: user}} = conn, params) do
39 user = User.get_cached_by_id(user.id)
42 Bookmark.for_user_query(user.id)
43 |> Pagination.fetch_paginated(params)
47 |> Enum.map(fn b -> Map.put(b.activity, :bookmark, Map.delete(b, :activity)) end)
50 |> add_link_headers(bookmarks)
51 |> put_view(StatusView)
52 |> render("index.json", %{activities: activities, for: user, as: :activity})
55 # Stubs for unimplemented mastodon api
57 def empty_array(conn, _) do
58 Logger.debug("Unimplemented, returning an empty array")
62 def empty_object(conn, _) do
63 Logger.debug("Unimplemented, returning an empty object")