9b62867b4db146afe449f6c9b7efd91a21ac0fca
[akkoma] / lib / pleroma / web / mastodon_api / controllers / mastodon_api_controller.ex
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
4
5 defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
6 use Pleroma.Web, :controller
7
8 import Pleroma.Web.ControllerHelper, only: [add_link_headers: 2]
9
10 alias Pleroma.Bookmark
11 alias Pleroma.Pagination
12 alias Pleroma.User
13 alias Pleroma.Web.ActivityPub.ActivityPub
14 alias Pleroma.Web.MastodonAPI.AccountView
15 alias Pleroma.Web.MastodonAPI.StatusView
16
17 require Logger
18
19 action_fallback(Pleroma.Web.MastodonAPI.FallbackController)
20
21 def favourites(%{assigns: %{user: user}} = conn, params) do
22 params =
23 params
24 |> Map.put("type", "Create")
25 |> Map.put("favorited_by", user.ap_id)
26 |> Map.put("blocking_user", user)
27
28 activities =
29 ActivityPub.fetch_activities([], params)
30 |> Enum.reverse()
31
32 conn
33 |> add_link_headers(activities)
34 |> put_view(StatusView)
35 |> render("index.json", %{activities: activities, for: user, as: :activity})
36 end
37
38 def bookmarks(%{assigns: %{user: user}} = conn, params) do
39 user = User.get_cached_by_id(user.id)
40
41 bookmarks =
42 Bookmark.for_user_query(user.id)
43 |> Pagination.fetch_paginated(params)
44
45 activities =
46 bookmarks
47 |> Enum.map(fn b -> Map.put(b.activity, :bookmark, Map.delete(b, :activity)) end)
48
49 conn
50 |> add_link_headers(bookmarks)
51 |> put_view(StatusView)
52 |> render("index.json", %{activities: activities, for: user, as: :activity})
53 end
54
55 # Stubs for unimplemented mastodon api
56 #
57 def empty_array(conn, _) do
58 Logger.debug("Unimplemented, returning an empty array")
59 json(conn, [])
60 end
61
62 def empty_object(conn, _) do
63 Logger.debug("Unimplemented, returning an empty object")
64 json(conn, %{})
65 end
66 end