diff options
author | lambadalambda <gitgud@rogerbraun.net> | 2017-09-04 14:49:55 -0400 |
---|---|---|
committer | lambadalambda <gitgud@rogerbraun.net> | 2017-09-04 14:49:55 -0400 |
commit | ea57e42b257ac49c1e9383fac8e5d8d6d961b8c8 (patch) | |
tree | 5fb62ba9f4ce108a08155ff4d270aab5de313d9e /lib | |
parent | 10e40206c6890cc1d88a391ab620ef859ed71521 (diff) | |
parent | 632e1f7943b8736d2f4084bfcb347c448eac7252 (diff) | |
download | pleroma-ea57e42b257ac49c1e9383fac8e5d8d6d961b8c8.tar.gz |
Merge branch 'deletions' into 'develop'
Deletions
See merge request !26
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pleroma/web/activity_pub/activity_pub.ex | 17 | ||||
-rw-r--r-- | lib/pleroma/web/ostatus/activity_representer.ex | 19 | ||||
-rw-r--r-- | lib/pleroma/web/ostatus/handlers/delete_handler.ex | 9 | ||||
-rw-r--r-- | lib/pleroma/web/router.ex | 1 | ||||
-rw-r--r-- | lib/pleroma/web/twitter_api/representers/activity_representer.ex | 20 | ||||
-rw-r--r-- | lib/pleroma/web/twitter_api/twitter_api.ex | 6 | ||||
-rw-r--r-- | lib/pleroma/web/twitter_api/twitter_api_controller.ex | 13 |
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} -> |