defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
use Pleroma.Web, :controller
- alias Pleroma.{Repo, App}
+ alias Pleroma.{Repo, Activity}
+ alias Pleroma.Web.OAuth.App
+ alias Pleroma.Web
+ alias Pleroma.Web.MastodonAPI.{StatusView, AccountView}
+ alias Pleroma.Web.ActivityPub.ActivityPub
+ alias Pleroma.Web.TwitterAPI.TwitterAPI
+ alias Pleroma.Web.CommonAPI
+ import Logger
def create_app(conn, params) do
with cs <- App.register_changeset(%App{}, params) |> IO.inspect,
end
def verify_credentials(%{assigns: %{user: user}} = conn, params) do
- account = %{
- id: user.id,
- username: user.nickname,
- acct: user.nickname,
- display_name: user.name,
- locked: false,
- created_at: user.inserted_at,
- note: user.bio,
- url: ""
+ account = AccountView.render("account.json", %{user: user})
+ json(conn, account)
+ end
+
+ def masto_instance(conn, _params) do
+ response = %{
+ uri: Web.base_url,
+ title: Web.base_url,
+ description: "A Pleroma instance, an alternative fediverse server",
+ version: "Pleroma Dev"
}
- json(conn, account)
+ json(conn, response)
+ end
+
+ def home_timeline(%{assigns: %{user: user}} = conn, params) do
+ activities = ActivityPub.fetch_activities([user.ap_id | user.following], Map.put(params, "type", "Create"))
+ render conn, StatusView, "index.json", %{activities: activities, for: user, as: :activity}
+ end
+
+ def public_timeline(%{assigns: %{user: user}} = conn, params) do
+ params = params
+ |> Map.put("type", "Create")
+ |> Map.put("local_only", !!params["local"])
+
+ activities = ActivityPub.fetch_public_activities(params)
+
+ render conn, StatusView, "index.json", %{activities: activities, for: user, as: :activity}
+ end
+
+ def get_status(%{assigns: %{user: user}} = conn, %{"id" => id}) do
+ with %Activity{} = activity <- Repo.get(Activity, id) do
+ render conn, StatusView, "status.json", %{activity: activity, for: user}
+ end
+ end
+
+ def post_status(%{assigns: %{user: user}} = conn, %{"status" => status} = params) do
+ l = status |> String.trim |> String.length
+
+ params = params
+ |> Map.put("in_reply_to_status_id", params["in_reply_to_id"])
+
+ if l > 0 && l < 5000 do
+ {:ok, activity} = TwitterAPI.create_status(user, params)
+ render conn, StatusView, "status.json", %{activity: activity, for: user, as: :activity}
+ end
+ end
+
+ def delete_status(%{assigns: %{user: user}} = conn, %{"id" => id}) do
+ with {:ok, %Activity{}} <- CommonAPI.delete(id, user) do
+ json(conn, %{})
+ else
+ _e ->
+ conn
+ |> put_status(403)
+ |> json(%{error: "Can't delete this post"})
+ end
+ end
+
+ def reblog_status(%{assigns: %{user: user}} = conn, %{"id" => ap_id_or_id}) do
+ with {:ok, _announce, %{data: %{"id" => id}}} = CommonAPI.repeat(ap_id_or_id, user),
+ %Activity{} = activity <- Activity.get_create_activity_by_object_ap_id(id) do
+ render conn, StatusView, "status.json", %{activity: activity, for: user, as: :activity}
+ end
+ end
+
+ def fav_status(%{assigns: %{user: user}} = conn, %{"id" => ap_id_or_id}) do
+ with {:ok, _fav, %{data: %{"id" => id}}} = CommonAPI.favorite(ap_id_or_id, user),
+ %Activity{} = activity <- Activity.get_create_activity_by_object_ap_id(id) do
+ render conn, StatusView, "status.json", %{activity: activity, for: user, as: :activity}
+ end
+ end
+
+ def unfav_status(%{assigns: %{user: user}} = conn, %{"id" => ap_id_or_id}) do
+ with {:ok, %{data: %{"id" => id}}} = CommonAPI.unfavorite(ap_id_or_id, user),
+ %Activity{} = activity <- Activity.get_create_activity_by_object_ap_id(id) do
+ render conn, StatusView, "status.json", %{activity: activity, for: user, as: :activity}
+ end
+ end
+
+ def empty_array(conn, _) do
+ Logger.debug("Unimplemented, returning an empty array")
+ json(conn, [])
end
end