Add deletion to masto api.
[akkoma] / lib / pleroma / web / mastodon_api / mastodon_api_controller.ex
1 defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
2 use Pleroma.Web, :controller
3 alias Pleroma.{Repo, Activity}
4 alias Pleroma.Web.OAuth.App
5 alias Pleroma.Web
6 alias Pleroma.Web.MastodonAPI.{StatusView, AccountView}
7 alias Pleroma.Web.ActivityPub.ActivityPub
8 alias Pleroma.Web.TwitterAPI.TwitterAPI
9 alias Pleroma.Web.CommonAPI
10
11 def create_app(conn, params) do
12 with cs <- App.register_changeset(%App{}, params) |> IO.inspect,
13 {:ok, app} <- Repo.insert(cs) |> IO.inspect do
14 res = %{
15 id: app.id,
16 client_id: app.client_id,
17 client_secret: app.client_secret
18 }
19
20 json(conn, res)
21 end
22 end
23
24 def verify_credentials(%{assigns: %{user: user}} = conn, params) do
25 account = AccountView.render("account.json", %{user: user})
26 json(conn, account)
27 end
28
29 def masto_instance(conn, _params) do
30 response = %{
31 uri: Web.base_url,
32 title: Web.base_url,
33 description: "A Pleroma instance, an alternative fediverse server",
34 version: "Pleroma Dev"
35 }
36
37 json(conn, response)
38 end
39
40 def home_timeline(%{assigns: %{user: user}} = conn, params) do
41 activities = ActivityPub.fetch_activities([user.ap_id | user.following], Map.put(params, "type", "Create"))
42 render conn, StatusView, "index.json", %{activities: activities, for: user, as: :activity}
43 end
44
45 def public_timeline(%{assigns: %{user: user}} = conn, params) do
46 params = params
47 |> Map.put("type", "Create")
48 |> Map.put("local_only", !!params["local"])
49
50 activities = ActivityPub.fetch_public_activities(params)
51
52 render conn, StatusView, "index.json", %{activities: activities, for: user, as: :activity}
53 end
54
55 def get_status(%{assigns: %{user: user}} = conn, %{"id" => id}) do
56 with %Activity{} = activity <- Repo.get(Activity, id) do
57 render conn, StatusView, "status.json", %{activity: activity, for: user}
58 end
59 end
60
61 def post_status(%{assigns: %{user: user}} = conn, %{"status" => status} = params) do
62 l = status |> String.trim |> String.length
63
64 params = params
65 |> Map.put("in_reply_to_status_id", params["in_reply_to_id"])
66
67 if l > 0 && l < 5000 do
68 {:ok, activity} = TwitterAPI.create_status(user, params)
69 render conn, StatusView, "status.json", %{activity: activity, for: user, as: :activity}
70 end
71 end
72
73 def delete_status(%{assigns: %{user: user}} = conn, %{"id" => id}) do
74 with {:ok, %Activity{}} <- CommonAPI.delete(id, user) do
75 json(conn, %{})
76 else
77 _e ->
78 conn
79 |> put_status(403)
80 |> json(%{error: "Can't delete this post"})
81 end
82 end
83 end