forked from YokaiRick/akkoma
Add support for outgoing update.
This commit is contained in:
parent
5ea6d96dbe
commit
e9de04b74b
6 changed files with 20 additions and 6 deletions
|
@ -68,7 +68,7 @@ def lazy_put_object_defaults(map) do
|
||||||
@doc """
|
@doc """
|
||||||
Inserts a full object if it is contained in an activity.
|
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
|
with {:ok, _} <- Object.create(object_data) do
|
||||||
:ok
|
:ok
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
defmodule Pleroma.Web.ActivityPub.UserView do
|
defmodule Pleroma.Web.ActivityPub.UserView do
|
||||||
use Pleroma.Web, :view
|
use Pleroma.Web, :view
|
||||||
alias Pleroma.Web.Salmon
|
alias Pleroma.Web.Salmon
|
||||||
|
alias Pleroma.Web.WebFinger
|
||||||
alias Pleroma.User
|
alias Pleroma.User
|
||||||
|
|
||||||
def render("user.json", %{user: user}) do
|
def render("user.json", %{user: user}) do
|
||||||
|
{:ok, user} = WebFinger.ensure_keys_present(user)
|
||||||
{:ok, _, public_key} = Salmon.keys_from_pem(user.info["keys"])
|
{: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_entry_encode(:RSAPublicKey, public_key)
|
||||||
public_key = :public_key.pem_encode([public_key])
|
public_key = :public_key.pem_encode([public_key])
|
||||||
|
|
|
@ -74,4 +74,8 @@ def post(user, %{"status" => status} = data) do
|
||||||
res
|
res
|
||||||
end
|
end
|
||||||
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
|
end
|
||||||
|
|
|
@ -24,6 +24,7 @@ def create_app(conn, params) do
|
||||||
end
|
end
|
||||||
|
|
||||||
def update_credentials(%{assigns: %{user: user}} = conn, params) do
|
def update_credentials(%{assigns: %{user: user}} = conn, params) do
|
||||||
|
original_user = user
|
||||||
params = if bio = params["note"] do
|
params = if bio = params["note"] do
|
||||||
Map.put(params, "bio", bio)
|
Map.put(params, "bio", bio)
|
||||||
else
|
else
|
||||||
|
@ -40,7 +41,7 @@ def update_credentials(%{assigns: %{user: user}} = conn, params) do
|
||||||
with %Plug.Upload{} <- avatar,
|
with %Plug.Upload{} <- avatar,
|
||||||
{:ok, object} <- ActivityPub.upload(avatar),
|
{:ok, object} <- ActivityPub.upload(avatar),
|
||||||
change = Ecto.Changeset.change(user, %{avatar: object.data}),
|
change = Ecto.Changeset.change(user, %{avatar: object.data}),
|
||||||
{:ok, user} = Repo.update(change) do
|
{:ok, user} = User.update_and_set_cache(change) do
|
||||||
user
|
user
|
||||||
else
|
else
|
||||||
_e -> user
|
_e -> user
|
||||||
|
@ -54,7 +55,7 @@ def update_credentials(%{assigns: %{user: user}} = conn, params) do
|
||||||
{:ok, object} <- ActivityPub.upload(banner),
|
{:ok, object} <- ActivityPub.upload(banner),
|
||||||
new_info <- Map.put(user.info, "banner", object.data),
|
new_info <- Map.put(user.info, "banner", object.data),
|
||||||
change <- User.info_changeset(user, %{info: new_info}),
|
change <- User.info_changeset(user, %{info: new_info}),
|
||||||
{:ok, user} <- Repo.update(change) do
|
{:ok, user} <- User.update_and_set_cache(change) do
|
||||||
user
|
user
|
||||||
else
|
else
|
||||||
_e -> user
|
_e -> user
|
||||||
|
@ -64,7 +65,10 @@ def update_credentials(%{assigns: %{user: user}} = conn, params) do
|
||||||
end
|
end
|
||||||
|
|
||||||
with changeset <- User.update_changeset(user, params),
|
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})
|
json conn, AccountView.render("account.json", %{user: user})
|
||||||
else
|
else
|
||||||
_e ->
|
_e ->
|
||||||
|
|
|
@ -208,6 +208,7 @@ def update_avatar(%{assigns: %{user: user}} = conn, params) do
|
||||||
{:ok, object} = ActivityPub.upload(params)
|
{:ok, object} = ActivityPub.upload(params)
|
||||||
change = Changeset.change(user, %{avatar: object.data})
|
change = Changeset.change(user, %{avatar: object.data})
|
||||||
{:ok, user} = User.update_and_set_cache(change)
|
{:ok, user} = User.update_and_set_cache(change)
|
||||||
|
CommonAPI.update(user)
|
||||||
|
|
||||||
render(conn, UserView, "show.json", %{user: user, for: user})
|
render(conn, UserView, "show.json", %{user: user, for: user})
|
||||||
end
|
end
|
||||||
|
@ -216,7 +217,8 @@ def update_banner(%{assigns: %{user: user}} = conn, params) do
|
||||||
with {:ok, object} <- ActivityPub.upload(%{"img" => params["banner"]}),
|
with {:ok, object} <- ActivityPub.upload(%{"img" => params["banner"]}),
|
||||||
new_info <- Map.put(user.info, "banner", object.data),
|
new_info <- Map.put(user.info, "banner", object.data),
|
||||||
change <- User.info_changeset(user, %{info: new_info}),
|
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
|
%{"url" => [ %{ "href" => href } | _ ]} = object.data
|
||||||
response = %{ url: href } |> Poison.encode!
|
response = %{ url: href } |> Poison.encode!
|
||||||
conn
|
conn
|
||||||
|
@ -306,6 +308,7 @@ def update_profile(%{assigns: %{user: user}} = conn, params) do
|
||||||
|
|
||||||
with changeset <- User.update_changeset(user, params),
|
with changeset <- User.update_changeset(user, params),
|
||||||
{:ok, user} <- User.update_and_set_cache(changeset) do
|
{:ok, user} <- User.update_and_set_cache(changeset) do
|
||||||
|
CommonAPI.update(user)
|
||||||
render(conn, UserView, "user.json", %{user: user, for: user})
|
render(conn, UserView, "user.json", %{user: user, for: user})
|
||||||
else
|
else
|
||||||
error ->
|
error ->
|
||||||
|
|
|
@ -47,9 +47,10 @@ test "inserts a given map into the activity database, giving it an id if it has
|
||||||
assert activity.data["id"] == given_id
|
assert activity.data["id"] == given_id
|
||||||
end
|
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 = %{
|
data = %{
|
||||||
"object" => %{
|
"object" => %{
|
||||||
|
"type" => "Note",
|
||||||
"ok" => true
|
"ok" => true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue