Merge branch 'feature/unrepeats' of git.pleroma.social:normandy/pleroma into feature...
authorFrancis Dinh <normandy@firemail.cc>
Wed, 25 Apr 2018 05:58:50 +0000 (01:58 -0400)
committerFrancis Dinh <normandy@firemail.cc>
Wed, 25 Apr 2018 05:58:50 +0000 (01:58 -0400)
1  2 
lib/pleroma/web/activity_pub/activity_pub.ex
lib/pleroma/web/activity_pub/utils.ex
test/web/activity_pub/activity_pub_test.exs

index ec161074dbf25cab2aba8dcda08e5ee468dd68e6,63d893039ba0dd3867a93779799c22a0b0ba9298..5f11b8410b336b342120a560ff23ab6dfaafb766
@@@ -10,9 -10,6 +10,9 @@@ defmodule Pleroma.Web.ActivityPub.Activ
  
    @httpoison Application.get_env(:pleroma, :httpoison)
  
 +  @instance Application.get_env(:pleroma, :instance)
 +  @rewrite_policy Keyword.get(@instance, :rewrite_policy)
 +
    def get_recipients(data) do
      (data["to"] || []) ++ (data["cc"] || [])
    end
@@@ -20,8 -17,7 +20,8 @@@
    def insert(map, local \\ true) when is_map(map) do
      with nil <- Activity.get_by_ap_id(map["id"]),
           map <- lazy_put_activity_defaults(map),
 -         :ok <- insert_full_object(map) do
 +         :ok <- insert_full_object(map),
 +         {:ok, map} <- @rewrite_policy.filter(map) do
        {:ok, activity} =
          Repo.insert(%Activity{
            data: map,
@@@ -65,8 -61,7 +65,8 @@@
               additional
             ),
           {:ok, activity} <- insert(create_data, local),
 -         :ok <- maybe_federate(activity) do
 +         :ok <- maybe_federate(activity),
 +         {:ok, actor} <- User.increase_note_count(actor) do
        {:ok, activity}
      end
    end
      end
    end
  
-   def unannounce(%User{} = actor, %Object{} = object, local \\ true) do
+   def unannounce(
+         %User{} = actor,
+         %Object{} = object,
+         local \\ true,
+         activity_id \\ nil
+       ) do
      with %Activity{} = activity <- get_existing_announce(actor.ap_id, object),
-          unannounce_data <- make_unannounce_data(actor, activity),
+          unannounce_data <- make_unannounce_data(actor, activity, activity_id),
           {:ok, unannounce_activity} <- insert(unannounce_data, local),
           :ok <- maybe_federate(activity),
           {:ok, _activity} <- Repo.delete(activity),
      with Repo.delete(object),
           Repo.delete_all(Activity.all_non_create_by_object_ap_id_q(id)),
           {:ok, activity} <- insert(data, local),
 -         :ok <- maybe_federate(activity) do
 +         :ok <- maybe_federate(activity),
 +         {:ok, actor} <- User.decrease_note_count(user) do
        {:ok, activity}
      end
    end
index c9d0e45b2db432c3b5158ac4b9e12b871e81ed52,10cc044febe74c34c300a18a70774c58f4727df1..f98545336f3efcc14998077b37803e7fc6ab4af4
@@@ -175,8 -175,7 +175,8 @@@ defmodule Pleroma.Web.ActivityPub.Util
  
    def update_element_in_object(property, element, object) do
      with new_data <-
 -           object.data |> Map.put("#{property}_count", length(element))
 +           object.data
 +           |> Map.put("#{property}_count", length(element))
             |> Map.put("#{property}s", element),
           changeset <- Changeset.change(object, data: new_data),
           {:ok, object} <- Repo.update(changeset),
    """
    def make_unannounce_data(
          %User{ap_id: ap_id} = user,
-         %Activity{data: %{"id" => id, "context" => context}} = activity
+         %Activity{data: %{"context" => context}} = activity,
+         activity_id
        ) do
-     %{
+     data = %{
        "type" => "Undo",
        "actor" => ap_id,
-       "object" => id,
+       "object" => activity.data,
        "to" => [user.follower_address, activity.data["actor"]],
        "cc" => ["https://www.w3.org/ns/activitystreams#Public"],
        "context" => context
      }
+     if activity_id, do: Map.put(data, "id", activity_id), else: data
    end
  
    def add_announce_to_object(%Activity{data: %{"actor" => actor}}, object) do
index d9f00613ad378ef106a278f53932938b6b89dc4c,208cc42d2a094edfa749769ccb055b954d296b57..7735e1bf8334f263f1c49c1cac4155b4daf27697
@@@ -83,18 -83,16 +83,18 @@@ defmodule Pleroma.Web.ActivityPub.Activ
  
    describe "create activities" do
      test "removes doubled 'to' recipients" do
 +      user = insert(:user)
 +
        {:ok, activity} =
          ActivityPub.create(%{
            to: ["user1", "user1", "user2"],
 -          actor: %User{ap_id: "1"},
 +          actor: user,
            context: "",
            object: %{}
          })
  
        assert activity.data["to"] == ["user1", "user2"]
 -      assert activity.actor == "1"
 +      assert activity.actor == user.ap_id
        assert activity.recipients == ["user1", "user2"]
      end
    end
        user = insert(:user)
  
        # Unannouncing an object that is not announced does nothing
 -      #{:ok, object} = ActivityPub.unannounce(user, object)
 -      #assert object.data["announcement_count"] == 0
 +      # {:ok, object} = ActivityPub.unannounce(user, object)
 +      # assert object.data["announcement_count"] == 0
  
        {:ok, announce_activity, object} = ActivityPub.announce(user, object)
        assert object.data["announcement_count"] == 1
                 User.ap_followers(user),
                 announce_activity.data["actor"]
               ]
++      
        assert unannounce_activity.data["type"] == "Undo"
-       assert unannounce_activity.data["object"] == announce_activity.data["id"]
+       assert unannounce_activity.data["object"] == announce_activity.data
        assert unannounce_activity.data["actor"] == user.ap_id
        assert unannounce_activity.data["context"] == announce_activity.data["context"]