diff options
author | lain <lain@soykaf.club> | 2018-02-25 21:02:44 +0100 |
---|---|---|
committer | lain <lain@soykaf.club> | 2018-02-25 21:08:32 +0100 |
commit | e9de04b74bb772fc1b2bff5201195e63eee198be (patch) | |
tree | 663b698d37d0662a1159ea17147f39f60ecff71b /lib | |
parent | 5ea6d96dbe37d7ded83a2ca52714fe9b33e44c67 (diff) | |
download | pleroma-e9de04b74bb772fc1b2bff5201195e63eee198be.tar.gz |
Add support for outgoing update.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pleroma/web/activity_pub/utils.ex | 2 | ||||
-rw-r--r-- | lib/pleroma/web/activity_pub/views/user_view.ex | 2 | ||||
-rw-r--r-- | lib/pleroma/web/common_api/common_api.ex | 4 | ||||
-rw-r--r-- | lib/pleroma/web/mastodon_api/mastodon_api_controller.ex | 10 | ||||
-rw-r--r-- | lib/pleroma/web/twitter_api/twitter_api_controller.ex | 5 |
5 files changed, 18 insertions, 5 deletions
diff --git a/lib/pleroma/web/activity_pub/utils.ex b/lib/pleroma/web/activity_pub/utils.ex index 919cd0bd5..cda106283 100644 --- a/lib/pleroma/web/activity_pub/utils.ex +++ b/lib/pleroma/web/activity_pub/utils.ex @@ -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 diff --git a/lib/pleroma/web/activity_pub/views/user_view.ex b/lib/pleroma/web/activity_pub/views/user_view.ex index b96ac7b27..179636884 100644 --- a/lib/pleroma/web/activity_pub/views/user_view.ex +++ b/lib/pleroma/web/activity_pub/views/user_view.ex @@ -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]) diff --git a/lib/pleroma/web/common_api/common_api.ex b/lib/pleroma/web/common_api/common_api.ex index d85a7cf5e..0f84542f0 100644 --- a/lib/pleroma/web/common_api/common_api.ex +++ b/lib/pleroma/web/common_api/common_api.ex @@ -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 diff --git a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex index 1f010a8ee..ca1f8154c 100644 --- a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex +++ b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex @@ -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 -> diff --git a/lib/pleroma/web/twitter_api/twitter_api_controller.ex b/lib/pleroma/web/twitter_api/twitter_api_controller.ex index 3eb4f5d63..848ec218f 100644 --- a/lib/pleroma/web/twitter_api/twitter_api_controller.ex +++ b/lib/pleroma/web/twitter_api/twitter_api_controller.ex @@ -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 -> |