forked from AkkomaGang/akkoma
AccountController: Allow removal / reset of user images.
This commit is contained in:
parent
4b53499bdc
commit
59cf78e412
3 changed files with 46 additions and 18 deletions
|
@ -89,7 +89,7 @@ defmodule Pleroma.User do
|
||||||
field(:keys, :string)
|
field(:keys, :string)
|
||||||
field(:public_key, :string)
|
field(:public_key, :string)
|
||||||
field(:ap_id, :string)
|
field(:ap_id, :string)
|
||||||
field(:avatar, :map)
|
field(:avatar, :map, default: %{})
|
||||||
field(:local, :boolean, default: true)
|
field(:local, :boolean, default: true)
|
||||||
field(:follower_address, :string)
|
field(:follower_address, :string)
|
||||||
field(:following_address, :string)
|
field(:following_address, :string)
|
||||||
|
@ -539,15 +539,12 @@ defp put_emoji(changeset) do
|
||||||
end
|
end
|
||||||
|
|
||||||
defp put_change_if_present(changeset, map_field, value_function) do
|
defp put_change_if_present(changeset, map_field, value_function) do
|
||||||
if value = get_change(changeset, map_field) do
|
with {:ok, value} <- fetch_change(changeset, map_field),
|
||||||
with {:ok, new_value} <- value_function.(value) do
|
{:ok, new_value} <- value_function.(value) do
|
||||||
put_change(changeset, map_field, new_value)
|
put_change(changeset, map_field, new_value)
|
||||||
else
|
else
|
||||||
_ -> changeset
|
_ -> changeset
|
||||||
end
|
end
|
||||||
else
|
|
||||||
changeset
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
defp put_upload(value, type) do
|
defp put_upload(value, type) do
|
||||||
|
|
|
@ -148,6 +148,13 @@ def update_credentials(%{assigns: %{user: user}, body_params: params} = conn, _p
|
||||||
|> Enum.filter(fn {_, value} -> not is_nil(value) end)
|
|> Enum.filter(fn {_, value} -> not is_nil(value) end)
|
||||||
|> Enum.into(%{})
|
|> Enum.into(%{})
|
||||||
|
|
||||||
|
# We use an empty string as a special value to reset
|
||||||
|
# avatars, banners, backgrounds
|
||||||
|
user_image_value = fn
|
||||||
|
"" -> {:ok, nil}
|
||||||
|
value -> {:ok, value}
|
||||||
|
end
|
||||||
|
|
||||||
user_params =
|
user_params =
|
||||||
[
|
[
|
||||||
:no_rich_text,
|
:no_rich_text,
|
||||||
|
@ -168,9 +175,9 @@ def update_credentials(%{assigns: %{user: user}, body_params: params} = conn, _p
|
||||||
|> Maps.put_if_present(:name, params[:display_name])
|
|> Maps.put_if_present(:name, params[:display_name])
|
||||||
|> Maps.put_if_present(:bio, params[:note])
|
|> Maps.put_if_present(:bio, params[:note])
|
||||||
|> Maps.put_if_present(:raw_bio, params[:note])
|
|> Maps.put_if_present(:raw_bio, params[:note])
|
||||||
|> Maps.put_if_present(:avatar, params[:avatar])
|
|> Maps.put_if_present(:avatar, params[:avatar], user_image_value)
|
||||||
|> Maps.put_if_present(:banner, params[:header])
|
|> Maps.put_if_present(:banner, params[:header], user_image_value)
|
||||||
|> Maps.put_if_present(:background, params[:pleroma_background_image])
|
|> Maps.put_if_present(:background, params[:pleroma_background_image], user_image_value)
|
||||||
|> Maps.put_if_present(
|
|> Maps.put_if_present(
|
||||||
:raw_fields,
|
:raw_fields,
|
||||||
params[:fields_attributes],
|
params[:fields_attributes],
|
||||||
|
|
|
@ -216,10 +216,21 @@ test "updates the user's avatar", %{user: user, conn: conn} do
|
||||||
filename: "an_image.jpg"
|
filename: "an_image.jpg"
|
||||||
}
|
}
|
||||||
|
|
||||||
conn = patch(conn, "/api/v1/accounts/update_credentials", %{"avatar" => new_avatar})
|
assert user.avatar == %{}
|
||||||
|
|
||||||
assert user_response = json_response_and_validate_schema(conn, 200)
|
res = patch(conn, "/api/v1/accounts/update_credentials", %{"avatar" => new_avatar})
|
||||||
|
|
||||||
|
assert user_response = json_response_and_validate_schema(res, 200)
|
||||||
assert user_response["avatar"] != User.avatar_url(user)
|
assert user_response["avatar"] != User.avatar_url(user)
|
||||||
|
|
||||||
|
user = User.get_by_id(user.id)
|
||||||
|
refute user.avatar == %{}
|
||||||
|
|
||||||
|
# Also resets it
|
||||||
|
_res = patch(conn, "/api/v1/accounts/update_credentials", %{"avatar" => ""})
|
||||||
|
|
||||||
|
user = User.get_by_id(user.id)
|
||||||
|
assert user.avatar == nil
|
||||||
end
|
end
|
||||||
|
|
||||||
test "updates the user's banner", %{user: user, conn: conn} do
|
test "updates the user's banner", %{user: user, conn: conn} do
|
||||||
|
@ -229,26 +240,39 @@ test "updates the user's banner", %{user: user, conn: conn} do
|
||||||
filename: "an_image.jpg"
|
filename: "an_image.jpg"
|
||||||
}
|
}
|
||||||
|
|
||||||
conn = patch(conn, "/api/v1/accounts/update_credentials", %{"header" => new_header})
|
res = patch(conn, "/api/v1/accounts/update_credentials", %{"header" => new_header})
|
||||||
|
|
||||||
assert user_response = json_response_and_validate_schema(conn, 200)
|
assert user_response = json_response_and_validate_schema(res, 200)
|
||||||
assert user_response["header"] != User.banner_url(user)
|
assert user_response["header"] != User.banner_url(user)
|
||||||
|
|
||||||
|
# Also resets it
|
||||||
|
_res = patch(conn, "/api/v1/accounts/update_credentials", %{"header" => ""})
|
||||||
|
|
||||||
|
user = User.get_by_id(user.id)
|
||||||
|
assert user.banner == nil
|
||||||
end
|
end
|
||||||
|
|
||||||
test "updates the user's background", %{conn: conn} do
|
test "updates the user's background", %{conn: conn, user: user} do
|
||||||
new_header = %Plug.Upload{
|
new_header = %Plug.Upload{
|
||||||
content_type: "image/jpg",
|
content_type: "image/jpg",
|
||||||
path: Path.absname("test/fixtures/image.jpg"),
|
path: Path.absname("test/fixtures/image.jpg"),
|
||||||
filename: "an_image.jpg"
|
filename: "an_image.jpg"
|
||||||
}
|
}
|
||||||
|
|
||||||
conn =
|
res =
|
||||||
patch(conn, "/api/v1/accounts/update_credentials", %{
|
patch(conn, "/api/v1/accounts/update_credentials", %{
|
||||||
"pleroma_background_image" => new_header
|
"pleroma_background_image" => new_header
|
||||||
})
|
})
|
||||||
|
|
||||||
assert user_response = json_response_and_validate_schema(conn, 200)
|
assert user_response = json_response_and_validate_schema(res, 200)
|
||||||
assert user_response["pleroma"]["background_image"]
|
assert user_response["pleroma"]["background_image"]
|
||||||
|
#
|
||||||
|
# Also resets it
|
||||||
|
_res =
|
||||||
|
patch(conn, "/api/v1/accounts/update_credentials", %{"pleroma_background_image" => ""})
|
||||||
|
|
||||||
|
user = User.get_by_id(user.id)
|
||||||
|
assert user.background == nil
|
||||||
end
|
end
|
||||||
|
|
||||||
test "requires 'write:accounts' permission" do
|
test "requires 'write:accounts' permission" do
|
||||||
|
|
Loading…
Reference in a new issue