|
|
@ -5,86 +5,10 @@ |
|
|
|
defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do |
|
|
|
use Pleroma.Web, :controller |
|
|
|
|
|
|
|
import Pleroma.Web.ControllerHelper, only: [add_link_headers: 2] |
|
|
|
|
|
|
|
alias Pleroma.Bookmark |
|
|
|
alias Pleroma.Pagination |
|
|
|
alias Pleroma.User |
|
|
|
alias Pleroma.Web.ActivityPub.ActivityPub |
|
|
|
alias Pleroma.Web.CommonAPI |
|
|
|
alias Pleroma.Web.MastodonAPI.AccountView |
|
|
|
alias Pleroma.Web.MastodonAPI.StatusView |
|
|
|
|
|
|
|
require Logger |
|
|
|
|
|
|
|
action_fallback(Pleroma.Web.MastodonAPI.FallbackController) |
|
|
|
|
|
|
|
def follows(%{assigns: %{user: follower}} = conn, %{"uri" => uri}) do |
|
|
|
with {_, %User{} = followed} <- {:followed, User.get_cached_by_nickname(uri)}, |
|
|
|
{_, true} <- {:followed, follower.id != followed.id}, |
|
|
|
{:ok, follower, followed, _} <- CommonAPI.follow(follower, followed) do |
|
|
|
conn |
|
|
|
|> put_view(AccountView) |
|
|
|
|> render("show.json", %{user: followed, for: follower}) |
|
|
|
else |
|
|
|
{:followed, _} -> |
|
|
|
{:error, :not_found} |
|
|
|
|
|
|
|
{:error, message} -> |
|
|
|
conn |
|
|
|
|> put_status(:forbidden) |
|
|
|
|> json(%{error: message}) |
|
|
|
end |
|
|
|
end |
|
|
|
|
|
|
|
def mutes(%{assigns: %{user: user}} = conn, _) do |
|
|
|
with muted_accounts <- User.muted_users(user) do |
|
|
|
res = AccountView.render("index.json", users: muted_accounts, for: user, as: :user) |
|
|
|
json(conn, res) |
|
|
|
end |
|
|
|
end |
|
|
|
|
|
|
|
def blocks(%{assigns: %{user: user}} = conn, _) do |
|
|
|
with blocked_accounts <- User.blocked_users(user) do |
|
|
|
res = AccountView.render("index.json", users: blocked_accounts, for: user, as: :user) |
|
|
|
json(conn, res) |
|
|
|
end |
|
|
|
end |
|
|
|
|
|
|
|
def favourites(%{assigns: %{user: user}} = conn, params) do |
|
|
|
params = |
|
|
|
params |
|
|
|
|> Map.put("type", "Create") |
|
|
|
|> Map.put("favorited_by", user.ap_id) |
|
|
|
|> Map.put("blocking_user", user) |
|
|
|
|
|
|
|
activities = |
|
|
|
ActivityPub.fetch_activities([], params) |
|
|
|
|> Enum.reverse() |
|
|
|
|
|
|
|
conn |
|
|
|
|> add_link_headers(activities) |
|
|
|
|> put_view(StatusView) |
|
|
|
|> render("index.json", %{activities: activities, for: user, as: :activity}) |
|
|
|
end |
|
|
|
|
|
|
|
def bookmarks(%{assigns: %{user: user}} = conn, params) do |
|
|
|
user = User.get_cached_by_id(user.id) |
|
|
|
|
|
|
|
bookmarks = |
|
|
|
Bookmark.for_user_query(user.id) |
|
|
|
|> Pagination.fetch_paginated(params) |
|
|
|
|
|
|
|
activities = |
|
|
|
bookmarks |
|
|
|
|> Enum.map(fn b -> Map.put(b.activity, :bookmark, Map.delete(b, :activity)) end) |
|
|
|
|
|
|
|
conn |
|
|
|
|> add_link_headers(bookmarks) |
|
|
|
|> put_view(StatusView) |
|
|
|
|> render("index.json", %{activities: activities, for: user, as: :activity}) |
|
|
|
end |
|
|
|
|
|
|
|
# Stubs for unimplemented mastodon api |
|
|
|
# |
|
|
|
def empty_array(conn, _) do |
|
|
|