aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/pleroma/web/activity_pub/activity_pub.ex17
-rw-r--r--lib/pleroma/web/ostatus/activity_representer.ex19
-rw-r--r--lib/pleroma/web/ostatus/handlers/delete_handler.ex9
-rw-r--r--lib/pleroma/web/router.ex1
-rw-r--r--lib/pleroma/web/twitter_api/representers/activity_representer.ex20
-rw-r--r--lib/pleroma/web/twitter_api/twitter_api.ex6
-rw-r--r--lib/pleroma/web/twitter_api/twitter_api_controller.ex13
7 files changed, 79 insertions, 6 deletions
diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex
index fbe259f50..db1302738 100644
--- a/lib/pleroma/web/activity_pub/activity_pub.ex
+++ b/lib/pleroma/web/activity_pub/activity_pub.ex
@@ -75,6 +75,23 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
end
end
+ def delete(%Object{data: %{"id" => id, "actor" => actor}} = object, local \\ true) do
+ user = User.get_cached_by_ap_id(actor)
+ data = %{
+ "type" => "Delete",
+ "actor" => actor,
+ "object" => id,
+ "to" => [user.follower_address, "https://www.w3.org/ns/activitystreams#Public"]
+ }
+ with Repo.delete(object),
+ Repo.delete_all(Activity.all_non_create_by_object_ap_id_q(id)),
+ Repo.delete_all(Activity.all_by_object_ap_id_q(id)),
+ {:ok, activity} <- insert(data, local),
+ :ok <- maybe_federate(activity) do
+ {:ok, activity}
+ end
+ end
+
def fetch_activities_for_context(context) do
query = from activity in Activity,
where: fragment("? @> ?", activity.data, ^%{ type: "Create", context: context }),
diff --git a/lib/pleroma/web/ostatus/activity_representer.ex b/lib/pleroma/web/ostatus/activity_representer.ex
index d4b897e19..dda29d3cf 100644
--- a/lib/pleroma/web/ostatus/activity_representer.ex
+++ b/lib/pleroma/web/ostatus/activity_representer.ex
@@ -199,6 +199,25 @@ defmodule Pleroma.Web.OStatus.ActivityRepresenter do
] ++ mentions ++ author
end
+ def to_simple_form(%{data: %{"type" => "Delete"}} = activity, user, with_author) do
+ h = fn(str) -> [to_charlist(str)] end
+
+ updated_at = activity.data["published"]
+ inserted_at = activity.data["published"]
+
+ author = if with_author, do: [{:author, UserRepresenter.to_simple_form(user)}], else: []
+
+ [
+ {:"activity:object-type", ['http://activitystrea.ms/schema/1.0/activity']},
+ {:"activity:verb", ['http://activitystrea.ms/schema/1.0/delete']},
+ {:id, h.(activity.data["object"])},
+ {:title, ['An object was deleted']},
+ {:content, [type: 'html'], ['An object was deleted']},
+ {:published, h.(inserted_at)},
+ {:updated, h.(updated_at)}
+ ] ++ author
+ end
+
def wrap_with_entry(simple_form) do
[{
:entry, [
diff --git a/lib/pleroma/web/ostatus/handlers/delete_handler.ex b/lib/pleroma/web/ostatus/handlers/delete_handler.ex
index f54a037a0..29fe4052c 100644
--- a/lib/pleroma/web/ostatus/handlers/delete_handler.ex
+++ b/lib/pleroma/web/ostatus/handlers/delete_handler.ex
@@ -2,14 +2,13 @@ defmodule Pleroma.Web.OStatus.DeleteHandler do
require Logger
alias Pleroma.Web.{XML, OStatus}
alias Pleroma.{Activity, Object, Repo}
+ alias Pleroma.Web.ActivityPub.ActivityPub
def handle_delete(entry, doc \\ nil) do
with id <- XML.string_from_xpath("//id", entry),
- object when not is_nil(object) <- Object.get_by_ap_id(id) do
- Repo.delete(object)
- Repo.delete_all(Activity.all_non_create_by_object_ap_id_q(id))
- Repo.delete_all(Activity.all_by_object_ap_id_q(id))
- nil
+ object when not is_nil(object) <- Object.get_by_ap_id(id),
+ {:ok, delete} <- ActivityPub.delete(object, false) do
+ delete
end
end
end
diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex
index 2b22140ee..c20ec3e80 100644
--- a/lib/pleroma/web/router.ex
+++ b/lib/pleroma/web/router.ex
@@ -82,6 +82,7 @@ defmodule Pleroma.Web.Router do
post "/statuses/update", TwitterAPI.Controller, :status_update
post "/statuses/retweet/:id", TwitterAPI.Controller, :retweet
+ post "/statuses/destroy/:id", TwitterAPI.Controller, :delete_post
post "/friendships/create", TwitterAPI.Controller, :follow
post "/friendships/destroy", TwitterAPI.Controller, :unfollow
diff --git a/lib/pleroma/web/twitter_api/representers/activity_representer.ex b/lib/pleroma/web/twitter_api/representers/activity_representer.ex
index bc3de0e90..b0769de89 100644
--- a/lib/pleroma/web/twitter_api/representers/activity_representer.ex
+++ b/lib/pleroma/web/twitter_api/representers/activity_representer.ex
@@ -96,6 +96,25 @@ defmodule Pleroma.Web.TwitterAPI.Representers.ActivityRepresenter do
}
end
+ def to_map(%Activity{data: %{"type" => "Delete", "published" => created_at, "object" => deleted_object }} = activity, %{user: user} = opts) do
+ created_at = created_at |> Utils.date_to_asctime
+
+ %{
+ "id" => activity.id,
+ "uri" => activity.data["object"],
+ "user" => UserView.render("show.json", %{user: user, for: opts[:for]}),
+ "attentions" => [],
+ "statusnet_html" => "deleted notice {{tag",
+ "text" => "deleted notice {{tag" ,
+ "is_local" => activity.local,
+ "is_post_verb" => false,
+ "created_at" => created_at,
+ "in_reply_to_status_id" => nil,
+ "external_url" => activity.data["id"],
+ "activity_type" => "delete"
+ }
+ end
+
def to_map(%Activity{data: %{"object" => %{"content" => content} = object}} = activity, %{user: user} = opts) do
created_at = object["published"] |> Utils.date_to_asctime
like_count = object["like_count"] || 0
@@ -117,6 +136,7 @@ defmodule Pleroma.Web.TwitterAPI.Representers.ActivityRepresenter do
%{
"id" => activity.id,
+ "uri" => activity.data["object"]["id"],
"user" => UserView.render("show.json", %{user: user, for: opts[:for]}),
"statusnet_html" => HtmlSanitizeEx.basic_html(content) |> Formatter.finmojifiy,
"text" => HtmlSanitizeEx.strip_tags(content),
diff --git a/lib/pleroma/web/twitter_api/twitter_api.ex b/lib/pleroma/web/twitter_api/twitter_api.ex
index de39834ca..1ae076e24 100644
--- a/lib/pleroma/web/twitter_api/twitter_api.ex
+++ b/lib/pleroma/web/twitter_api/twitter_api.ex
@@ -265,6 +265,12 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do
ActivityRepresenter.to_map(activity, Map.merge(opts, %{users: [user, announced_actor], announced_activity: announced_activity}))
end
+ defp activity_to_status(%Activity{data: %{"type" => "Delete"}} = activity, opts) do
+ actor = get_in(activity.data, ["actor"])
+ user = User.get_cached_by_ap_id(actor)
+ ActivityRepresenter.to_map(activity, Map.merge(opts, %{user: user}))
+ end
+
defp activity_to_status(activity, opts) do
actor = get_in(activity.data, ["actor"])
user = User.get_cached_by_ap_id(actor)
diff --git a/lib/pleroma/web/twitter_api/twitter_api_controller.ex b/lib/pleroma/web/twitter_api/twitter_api_controller.ex
index 3580e48d2..3ec54616a 100644
--- a/lib/pleroma/web/twitter_api/twitter_api_controller.ex
+++ b/lib/pleroma/web/twitter_api/twitter_api_controller.ex
@@ -2,7 +2,7 @@ defmodule Pleroma.Web.TwitterAPI.Controller do
use Pleroma.Web, :controller
alias Pleroma.Web.TwitterAPI.{TwitterAPI, UserView}
alias Pleroma.Web.TwitterAPI.Representers.ActivityRepresenter
- alias Pleroma.{Repo, Activity, User}
+ alias Pleroma.{Repo, Activity, User, Object}
alias Pleroma.Web.ActivityPub.ActivityPub
alias Ecto.Changeset
@@ -94,6 +94,17 @@ defmodule Pleroma.Web.TwitterAPI.Controller do
end
end
+ def delete_post(%{assigns: %{user: user}} = conn, %{"id" => id}) do
+ with %Activity{data: %{"object" => %{"id" => object_id}}} <- Repo.get(Activity, id),
+ %Object{} = object <- Object.get_by_ap_id(object_id),
+ true <- user.ap_id == object.data["actor"],
+ {:ok, delete} <- ActivityPub.delete(object) |> IO.inspect do
+ json = ActivityRepresenter.to_json(delete, %{user: user, for: user})
+ conn
+ |> json_reply(200, json)
+ end
+ end
+
def unfollow(%{assigns: %{user: user}} = conn, params) do
case TwitterAPI.unfollow(user, params) do
{:ok, user, unfollowed} ->