Add support for outgoing update.
authorlain <lain@soykaf.club>
Sun, 25 Feb 2018 20:02:44 +0000 (21:02 +0100)
committerlain <lain@soykaf.club>
Sun, 25 Feb 2018 20:08:32 +0000 (21:08 +0100)
lib/pleroma/web/activity_pub/utils.ex
lib/pleroma/web/activity_pub/views/user_view.ex
lib/pleroma/web/common_api/common_api.ex
lib/pleroma/web/mastodon_api/mastodon_api_controller.ex
lib/pleroma/web/twitter_api/twitter_api_controller.ex
test/web/activity_pub/activity_pub_test.exs

index 919cd0bd5141bbda3ffdb8c0b6e7a6efe3803695..cda10628387f066bedb69881aff5737a9266835f 100644 (file)
@@ -68,7 +68,7 @@ defmodule Pleroma.Web.ActivityPub.Utils do
   @doc """
   Inserts a full object if it is contained in an activity.
   """
-  def insert_full_object(%{"object" => object_data}) when is_map(object_data) do
+  def insert_full_object(%{"object" => %{"type" => type} = object_data}) when is_map(object_data) and type in ["Note"] do
     with {:ok, _} <- Object.create(object_data) do
       :ok
     end
index b96ac7b27855bf3b038c416cae9c89d6a6cebee0..179636884aeb6e5c1a3431de71558e8361a4c761 100644 (file)
@@ -1,9 +1,11 @@
 defmodule Pleroma.Web.ActivityPub.UserView do
   use Pleroma.Web, :view
   alias Pleroma.Web.Salmon
+  alias Pleroma.Web.WebFinger
   alias Pleroma.User
 
   def render("user.json", %{user: user}) do
+    {:ok, user} = WebFinger.ensure_keys_present(user)
     {:ok, _, public_key} = Salmon.keys_from_pem(user.info["keys"])
     public_key = :public_key.pem_entry_encode(:RSAPublicKey, public_key)
     public_key = :public_key.pem_encode([public_key])
index d85a7cf5e4fc16d8d30e093b37874c4c7e74db9c..0f84542f0993dceff391cae4fcc665ed4b73335d 100644 (file)
@@ -74,4 +74,8 @@ defmodule Pleroma.Web.CommonAPI do
       res
     end
   end
+
+  def update(user) do
+    ActivityPub.update(%{local: true, to: [user.follower_address], cc: [], actor: user.ap_id, object: Pleroma.Web.ActivityPub.UserView.render("user.json", %{user: user})})
+  end
 end
index 1f010a8eef9f2047eaf0df970eef61549ac099f4..ca1f8154c69647f110987167690f8d772c829838 100644 (file)
@@ -24,6 +24,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
   end
 
   def update_credentials(%{assigns: %{user: user}} = conn, params) do
+    original_user = user
     params = if bio = params["note"] do
       Map.put(params, "bio", bio)
     else
@@ -40,7 +41,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
       with %Plug.Upload{} <- avatar,
            {:ok, object} <- ActivityPub.upload(avatar),
            change = Ecto.Changeset.change(user, %{avatar: object.data}),
-           {:ok, user} = Repo.update(change) do
+           {:ok, user} = User.update_and_set_cache(change) do
         user
       else
         _e -> user
@@ -54,7 +55,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
            {:ok, object} <- ActivityPub.upload(banner),
            new_info <- Map.put(user.info, "banner", object.data),
            change <- User.info_changeset(user, %{info: new_info}),
-           {:ok, user} <- Repo.update(change) do
+           {:ok, user} <- User.update_and_set_cache(change) do
         user
       else
         _e -> user
@@ -64,7 +65,10 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
     end
 
     with changeset <- User.update_changeset(user, params),
-         {:ok, user} <- Repo.update(changeset) do
+         {:ok, user} <- User.update_and_set_cache(changeset) do
+      if original_user != user do
+        CommonAPI.update(user)
+      end
       json conn, AccountView.render("account.json", %{user: user})
     else
       _e ->
index 3eb4f5d63b40ae018955f02557466ee4db9db91d..848ec218ff82c145b632a1b05b33d3d52aabcaf9 100644 (file)
@@ -208,6 +208,7 @@ defmodule Pleroma.Web.TwitterAPI.Controller do
     {:ok, object} = ActivityPub.upload(params)
     change = Changeset.change(user, %{avatar: object.data})
     {:ok, user} = User.update_and_set_cache(change)
+    CommonAPI.update(user)
 
     render(conn, UserView, "show.json", %{user: user, for: user})
   end
@@ -216,7 +217,8 @@ defmodule Pleroma.Web.TwitterAPI.Controller do
     with {:ok, object} <- ActivityPub.upload(%{"img" => params["banner"]}),
          new_info <- Map.put(user.info, "banner", object.data),
          change <- User.info_changeset(user, %{info: new_info}),
-         {:ok, _user} <- User.update_and_set_cache(change) do
+         {:ok, user} <- User.update_and_set_cache(change) do
+      CommonAPI.update(user)
       %{"url" => [ %{ "href" => href } | _ ]} = object.data
       response = %{ url: href } |> Poison.encode!
       conn
@@ -306,6 +308,7 @@ defmodule Pleroma.Web.TwitterAPI.Controller do
 
     with changeset <- User.update_changeset(user, params),
          {:ok, user} <- User.update_and_set_cache(changeset) do
+      CommonAPI.update(user)
       render(conn, UserView, "user.json", %{user: user, for: user})
     else
       error ->
index 5ab7c84957271350087365e583f51a85cea97317..96792bca5780650b40350f36a5aff41503ca1a69 100644 (file)
@@ -47,9 +47,10 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do
       assert activity.data["id"] == given_id
     end
 
-    test "adds an id to a given object if it lacks one and inserts it to the object database" do
+    test "adds an id to a given object if it lacks one and is a note and inserts it to the object database" do
       data = %{
         "object" => %{
+          "type" => "Note",
           "ok" => true
         }
       }