Ability to reset avatar, profile banner and backgroud
authorSachin Joshi <satchin.joshi@gmail.com>
Wed, 22 May 2019 04:39:19 +0000 (06:39 +0200)
committerSachin Joshi <satchin.joshi@gmail.com>
Wed, 22 May 2019 04:47:18 +0000 (06:47 +0200)
CHANGELOG.md
lib/pleroma/web/twitter_api/twitter_api_controller.ex
test/web/twitter_api/twitter_api_controller_test.exs

index 12c43913511f4e9dda5368c0daaf51bab669e27c..d4a74d30c2042717a14c90379bd9d9fbfba1ad48 100644 (file)
@@ -38,6 +38,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
 - Metadata: RelMe provider
 - OAuth: added support for refresh tokens
 - Emoji packs and emoji pack manager
+- Ability to reset avatar, profile banner and backgroud
 
 ### Changed
 - **Breaking:** Configuration: move from Pleroma.Mailer to Pleroma.Emails.Mailer
index 31e86685a2b0172f073ee4438a33031dcd2f01c4..a796e38fdbd33acfc23d54512de4a0dfc63c4cb7 100644 (file)
@@ -456,6 +456,16 @@ defmodule Pleroma.Web.TwitterAPI.Controller do
     end
   end
 
+  def update_avatar(%{assigns: %{user: user}} = conn, %{"img" => ""}) do
+    change = Changeset.change(user, %{avatar: nil})
+    {:ok, user} = User.update_and_set_cache(change)
+    CommonAPI.update(user)
+
+    conn
+    |> put_view(UserView)
+    |> render("show.json", %{user: user, for: user})
+  end
+
   def update_avatar(%{assigns: %{user: user}} = conn, params) do
     {:ok, object} = ActivityPub.upload(params, type: :avatar)
     change = Changeset.change(user, %{avatar: object.data})
@@ -467,6 +477,19 @@ defmodule Pleroma.Web.TwitterAPI.Controller do
     |> render("show.json", %{user: user, for: user})
   end
 
+  def update_banner(%{assigns: %{user: user}} = conn, %{"banner" => ""}) do
+    with new_info <- %{"banner" => %{}},
+         info_cng <- User.Info.profile_update(user.info, new_info),
+         changeset <- Ecto.Changeset.change(user) |> Ecto.Changeset.put_embed(:info, info_cng),
+         {:ok, user} <- User.update_and_set_cache(changeset) do
+      CommonAPI.update(user)
+      response = %{url: nil} |> Jason.encode!()
+
+      conn
+      |> json_reply(200, response)
+    end
+  end
+
   def update_banner(%{assigns: %{user: user}} = conn, params) do
     with {:ok, object} <- ActivityPub.upload(%{"img" => params["banner"]}, type: :banner),
          new_info <- %{"banner" => object.data},
@@ -482,6 +505,18 @@ defmodule Pleroma.Web.TwitterAPI.Controller do
     end
   end
 
+  def update_background(%{assigns: %{user: user}} = conn, %{"img" => ""}) do
+    with new_info <- %{"background" => %{}},
+         info_cng <- User.Info.profile_update(user.info, new_info),
+         changeset <- Ecto.Changeset.change(user) |> Ecto.Changeset.put_embed(:info, info_cng),
+         {:ok, _user} <- User.update_and_set_cache(changeset) do
+      response = %{url: nil} |> Jason.encode!()
+
+      conn
+      |> json_reply(200, response)
+    end
+  end
+
   def update_background(%{assigns: %{user: user}} = conn, params) do
     with {:ok, object} <- ActivityPub.upload(params, type: :background),
          new_info <- %{"background" => object.data},
index e194f14fb55a80a62493582701cd664eae7f1554..373efa639b90f4cef1ce7975b476e88883fe83b9 100644 (file)
@@ -40,6 +40,18 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do
       user = refresh_record(user)
       assert user.info.banner["type"] == "Image"
     end
+
+    test "profile banner can be reset", %{conn: conn} do
+      user = insert(:user)
+
+      conn
+      |> assign(:user, user)
+      |> post(authenticated_twitter_api__path(conn, :update_banner), %{"banner" => ""})
+      |> json_response(200)
+
+      user = refresh_record(user)
+      assert user.info.banner == %{}
+    end
   end
 
   describe "POST /api/qvitter/update_background_image" do
@@ -54,6 +66,18 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do
       user = refresh_record(user)
       assert user.info.background["type"] == "Image"
     end
+
+    test "background can be reset", %{conn: conn} do
+      user = insert(:user)
+
+      conn
+      |> assign(:user, user)
+      |> post(authenticated_twitter_api__path(conn, :update_background), %{"img" => ""})
+      |> json_response(200)
+
+      user = refresh_record(user)
+      assert user.info.background == %{}
+    end
   end
 
   describe "POST /api/account/verify_credentials" do
@@ -853,6 +877,19 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do
       assert json_response(conn, 200) ==
                UserView.render("show.json", %{user: current_user, for: current_user})
     end
+
+    test "user avatar can be reset", %{conn: conn, user: current_user} do
+      conn =
+        conn
+        |> with_credentials(current_user.nickname, "test")
+        |> post("/api/qvitter/update_avatar.json", %{img: ""})
+
+      current_user = User.get_cached_by_id(current_user.id)
+      assert current_user.avatar == nil
+
+      assert json_response(conn, 200) ==
+               UserView.render("show.json", %{user: current_user, for: current_user})
+    end
   end
 
   describe "GET /api/qvitter/mutes.json" do