b1d2172c7c923825e26d82c95e99fa2d1a6273c4
[akkoma] / lib / pleroma / web / common_api / common_api.ex
1 defmodule Pleroma.Web.CommonAPI do
2 alias Pleroma.{Repo, Activity, Object}
3 alias Pleroma.Web.ActivityPub.ActivityPub
4
5 def delete(activity_id, user) do
6 with %Activity{data: %{"object" => %{"id" => object_id}}} <- Repo.get(Activity, activity_id),
7 %Object{} = object <- Object.get_by_ap_id(object_id),
8 true <- user.ap_id == object.data["actor"],
9 {:ok, delete} <- ActivityPub.delete(object) do
10 {:ok, delete}
11 end
12 end
13
14 def repeat(id_or_ap_id, user) do
15 with %Activity{} = activity <- get_by_id_or_ap_id(id_or_ap_id),
16 false <- activity.data["actor"] == user.ap_id,
17 object <- Object.get_by_ap_id(activity.data["object"]["id"]) do
18 ActivityPub.announce(user, object)
19 else
20 _ ->
21 {:error, "Could not repeat"}
22 end
23 end
24
25 # This is a hack for twidere.
26 def get_by_id_or_ap_id(id) do
27 activity = Repo.get(Activity, id) || Activity.get_create_activity_by_object_ap_id(id)
28 if activity.data["type"] == "Create" do
29 activity
30 else
31 Activity.get_create_activity_by_object_ap_id(activity.data["object"])
32 end
33 end
34 end