diff options
| author | lain <lain@soykaf.club> | 2020-07-07 16:20:50 +0200 | 
|---|---|---|
| committer | lain <lain@soykaf.club> | 2020-07-07 16:53:03 +0200 | 
| commit | 59cf78e41236a527b21befaadd329e882a62b40a (patch) | |
| tree | e71dbc60b19c925cf0f24411d93cf7310b15b8f4 | |
| parent | 4b53499bdcd8df59c30c0326eebfe30a7a13161e (diff) | |
| download | pleroma-59cf78e41236a527b21befaadd329e882a62b40a.tar.gz pleroma-59cf78e41236a527b21befaadd329e882a62b40a.zip | |
AccountController: Allow removal / reset of user images.
| -rw-r--r-- | lib/pleroma/user.ex | 13 | ||||
| -rw-r--r-- | lib/pleroma/web/mastodon_api/controllers/account_controller.ex | 13 | ||||
| -rw-r--r-- | test/web/mastodon_api/controllers/account_controller/update_credentials_test.exs | 38 | 
3 files changed, 46 insertions, 18 deletions
| diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 8a54546d6..e98332744 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -89,7 +89,7 @@ defmodule Pleroma.User do      field(:keys, :string)      field(:public_key, :string)      field(:ap_id, :string) -    field(:avatar, :map) +    field(:avatar, :map, default: %{})      field(:local, :boolean, default: true)      field(:follower_address, :string)      field(:following_address, :string) @@ -539,14 +539,11 @@ defmodule Pleroma.User do    end    defp put_change_if_present(changeset, map_field, value_function) do -    if value = get_change(changeset, map_field) do -      with {:ok, new_value} <- value_function.(value) do -        put_change(changeset, map_field, new_value) -      else -        _ -> changeset -      end +    with {:ok, value} <- fetch_change(changeset, map_field), +         {:ok, new_value} <- value_function.(value) do +      put_change(changeset, map_field, new_value)      else -      changeset +      _ -> changeset      end    end diff --git a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex index b5008d69b..d4532258c 100644 --- a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex @@ -148,6 +148,13 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do        |> Enum.filter(fn {_, value} -> not is_nil(value) end)        |> 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 =        [          :no_rich_text, @@ -168,9 +175,9 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do        |> Maps.put_if_present(:name, params[:display_name])        |> Maps.put_if_present(:bio, params[:note])        |> Maps.put_if_present(:raw_bio, params[:note]) -      |> Maps.put_if_present(:avatar, params[:avatar]) -      |> Maps.put_if_present(:banner, params[:header]) -      |> Maps.put_if_present(:background, params[:pleroma_background_image]) +      |> Maps.put_if_present(:avatar, params[:avatar], user_image_value) +      |> Maps.put_if_present(:banner, params[:header], user_image_value) +      |> Maps.put_if_present(:background, params[:pleroma_background_image], user_image_value)        |> Maps.put_if_present(          :raw_fields,          params[:fields_attributes], diff --git a/test/web/mastodon_api/controllers/account_controller/update_credentials_test.exs b/test/web/mastodon_api/controllers/account_controller/update_credentials_test.exs index f67d294ba..b55bb76a7 100644 --- a/test/web/mastodon_api/controllers/account_controller/update_credentials_test.exs +++ b/test/web/mastodon_api/controllers/account_controller/update_credentials_test.exs @@ -216,10 +216,21 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController.UpdateCredentialsTest do          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) + +      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      test "updates the user's banner", %{user: user, conn: conn} do @@ -229,26 +240,39 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController.UpdateCredentialsTest do          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) + +      # Also resets it +      _res = patch(conn, "/api/v1/accounts/update_credentials", %{"header" => ""}) + +      user = User.get_by_id(user.id) +      assert user.banner == nil      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{          content_type: "image/jpg",          path: Path.absname("test/fixtures/image.jpg"),          filename: "an_image.jpg"        } -      conn = +      res =          patch(conn, "/api/v1/accounts/update_credentials", %{            "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"] +      # +      # 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      test "requires 'write:accounts' permission" do | 
