forked from mirrors/akkoma
Merge branch 'remove-avatar-header' into 'develop'
Ability to reset avatar, profile banner and backgroud See merge request pleroma/pleroma!1187
This commit is contained in:
commit
1417627d07
|
@ -85,6 +85,7 @@ Configuration: `federation_incoming_replies_max_depth` option
|
||||||
- OAuth: added job to clean expired access tokens
|
- OAuth: added job to clean expired access tokens
|
||||||
- MRF: Support for rejecting reports from specific instances (`mrf_simple`)
|
- MRF: Support for rejecting reports from specific instances (`mrf_simple`)
|
||||||
- MRF: Support for stripping avatars and banner images from specific instances (`mrf_simple`)
|
- MRF: Support for stripping avatars and banner images from specific instances (`mrf_simple`)
|
||||||
|
- Ability to reset avatar, profile banner and backgroud
|
||||||
- MRF: Support for running subchains.
|
- MRF: Support for running subchains.
|
||||||
- Configuration: `skip_thread_containment` option
|
- Configuration: `skip_thread_containment` option
|
||||||
- Configuration: `rate_limit` option. See `Pleroma.Plugs.RateLimiter` documentation for details.
|
- Configuration: `rate_limit` option. See `Pleroma.Plugs.RateLimiter` documentation for details.
|
||||||
|
|
|
@ -167,6 +167,69 @@ def update_credentials(%{assigns: %{user: user}} = conn, params) do
|
||||||
end
|
end
|
||||||
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)
|
||||||
|
|
||||||
|
json(conn, %{url: nil})
|
||||||
|
end
|
||||||
|
|
||||||
|
def update_avatar(%{assigns: %{user: user}} = conn, params) do
|
||||||
|
{:ok, object} = ActivityPub.upload(params, type: :avatar)
|
||||||
|
change = Changeset.change(user, %{avatar: object.data})
|
||||||
|
{:ok, user} = User.update_and_set_cache(change)
|
||||||
|
CommonAPI.update(user)
|
||||||
|
%{"url" => [%{"href" => href} | _]} = object.data
|
||||||
|
|
||||||
|
json(conn, %{url: href})
|
||||||
|
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)
|
||||||
|
|
||||||
|
json(conn, %{url: nil})
|
||||||
|
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},
|
||||||
|
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)
|
||||||
|
%{"url" => [%{"href" => href} | _]} = object.data
|
||||||
|
|
||||||
|
json(conn, %{url: href})
|
||||||
|
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
|
||||||
|
json(conn, %{url: nil})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def update_background(%{assigns: %{user: user}} = conn, params) do
|
||||||
|
with {:ok, object} <- ActivityPub.upload(params, type: :background),
|
||||||
|
new_info <- %{"background" => object.data},
|
||||||
|
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
|
||||||
|
%{"url" => [%{"href" => href} | _]} = object.data
|
||||||
|
|
||||||
|
json(conn, %{url: href})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def verify_credentials(%{assigns: %{user: user}} = conn, _) do
|
def verify_credentials(%{assigns: %{user: user}} = conn, _) do
|
||||||
chat_token = Phoenix.Token.sign(conn, "user socket", user.id)
|
chat_token = Phoenix.Token.sign(conn, "user socket", user.id)
|
||||||
|
|
||||||
|
|
|
@ -322,6 +322,10 @@ defmodule Pleroma.Web.Router do
|
||||||
|
|
||||||
patch("/accounts/update_credentials", MastodonAPIController, :update_credentials)
|
patch("/accounts/update_credentials", MastodonAPIController, :update_credentials)
|
||||||
|
|
||||||
|
patch("/accounts/update_avatar", MastodonAPIController, :update_avatar)
|
||||||
|
patch("/accounts/update_banner", MastodonAPIController, :update_banner)
|
||||||
|
patch("/accounts/update_background", MastodonAPIController, :update_background)
|
||||||
|
|
||||||
post("/statuses", MastodonAPIController, :post_status)
|
post("/statuses", MastodonAPIController, :post_status)
|
||||||
delete("/statuses/:id", MastodonAPIController, :delete_status)
|
delete("/statuses/:id", MastodonAPIController, :delete_status)
|
||||||
|
|
||||||
|
|
|
@ -456,6 +456,16 @@ def resend_confirmation_email(conn, params) do
|
||||||
end
|
end
|
||||||
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
|
def update_avatar(%{assigns: %{user: user}} = conn, params) do
|
||||||
{:ok, object} = ActivityPub.upload(params, type: :avatar)
|
{:ok, object} = ActivityPub.upload(params, type: :avatar)
|
||||||
change = Changeset.change(user, %{avatar: object.data})
|
change = Changeset.change(user, %{avatar: object.data})
|
||||||
|
@ -467,6 +477,19 @@ def update_avatar(%{assigns: %{user: user}} = conn, params) do
|
||||||
|> render("show.json", %{user: user, for: user})
|
|> render("show.json", %{user: user, for: user})
|
||||||
end
|
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
|
def update_banner(%{assigns: %{user: user}} = conn, params) do
|
||||||
with {:ok, object} <- ActivityPub.upload(%{"img" => params["banner"]}, type: :banner),
|
with {:ok, object} <- ActivityPub.upload(%{"img" => params["banner"]}, type: :banner),
|
||||||
new_info <- %{"banner" => object.data},
|
new_info <- %{"banner" => object.data},
|
||||||
|
@ -482,6 +505,18 @@ def update_banner(%{assigns: %{user: user}} = conn, params) do
|
||||||
end
|
end
|
||||||
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
|
def update_background(%{assigns: %{user: user}} = conn, params) do
|
||||||
with {:ok, object} <- ActivityPub.upload(params, type: :background),
|
with {:ok, object} <- ActivityPub.upload(params, type: :background),
|
||||||
new_info <- %{"background" => object.data},
|
new_info <- %{"background" => object.data},
|
||||||
|
|
|
@ -24,6 +24,8 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do
|
||||||
import ExUnit.CaptureLog
|
import ExUnit.CaptureLog
|
||||||
import Tesla.Mock
|
import Tesla.Mock
|
||||||
|
|
||||||
|
@image "data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7"
|
||||||
|
|
||||||
setup do
|
setup do
|
||||||
mock(fn env -> apply(HttpRequestMock, :request, [env]) end)
|
mock(fn env -> apply(HttpRequestMock, :request, [env]) end)
|
||||||
:ok
|
:ok
|
||||||
|
@ -584,6 +586,101 @@ test "apps/verify_credentials", %{conn: conn} do
|
||||||
assert expected == json_response(conn, 200)
|
assert expected == json_response(conn, 200)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "user avatar can be set", %{conn: conn} do
|
||||||
|
user = insert(:user)
|
||||||
|
avatar_image = File.read!("test/fixtures/avatar_data_uri")
|
||||||
|
|
||||||
|
conn =
|
||||||
|
conn
|
||||||
|
|> assign(:user, user)
|
||||||
|
|> patch("/api/v1/accounts/update_avatar", %{img: avatar_image})
|
||||||
|
|
||||||
|
user = refresh_record(user)
|
||||||
|
|
||||||
|
assert %{
|
||||||
|
"name" => _,
|
||||||
|
"type" => _,
|
||||||
|
"url" => [
|
||||||
|
%{
|
||||||
|
"href" => _,
|
||||||
|
"mediaType" => _,
|
||||||
|
"type" => _
|
||||||
|
}
|
||||||
|
]
|
||||||
|
} = user.avatar
|
||||||
|
|
||||||
|
assert %{"url" => _} = json_response(conn, 200)
|
||||||
|
end
|
||||||
|
|
||||||
|
test "user avatar can be reset", %{conn: conn} do
|
||||||
|
user = insert(:user)
|
||||||
|
|
||||||
|
conn =
|
||||||
|
conn
|
||||||
|
|> assign(:user, user)
|
||||||
|
|> patch("/api/v1/accounts/update_avatar", %{img: ""})
|
||||||
|
|
||||||
|
user = User.get_cached_by_id(user.id)
|
||||||
|
|
||||||
|
assert user.avatar == nil
|
||||||
|
|
||||||
|
assert %{"url" => nil} = json_response(conn, 200)
|
||||||
|
end
|
||||||
|
|
||||||
|
test "can set profile banner", %{conn: conn} do
|
||||||
|
user = insert(:user)
|
||||||
|
|
||||||
|
conn =
|
||||||
|
conn
|
||||||
|
|> assign(:user, user)
|
||||||
|
|> patch("/api/v1/accounts/update_banner", %{"banner" => @image})
|
||||||
|
|
||||||
|
user = refresh_record(user)
|
||||||
|
assert user.info.banner["type"] == "Image"
|
||||||
|
|
||||||
|
assert %{"url" => _} = json_response(conn, 200)
|
||||||
|
end
|
||||||
|
|
||||||
|
test "can reset profile banner", %{conn: conn} do
|
||||||
|
user = insert(:user)
|
||||||
|
|
||||||
|
conn =
|
||||||
|
conn
|
||||||
|
|> assign(:user, user)
|
||||||
|
|> patch("/api/v1/accounts/update_banner", %{"banner" => ""})
|
||||||
|
|
||||||
|
user = refresh_record(user)
|
||||||
|
assert user.info.banner == %{}
|
||||||
|
|
||||||
|
assert %{"url" => nil} = json_response(conn, 200)
|
||||||
|
end
|
||||||
|
|
||||||
|
test "background image can be set", %{conn: conn} do
|
||||||
|
user = insert(:user)
|
||||||
|
|
||||||
|
conn =
|
||||||
|
conn
|
||||||
|
|> assign(:user, user)
|
||||||
|
|> patch("/api/v1/accounts/update_background", %{"img" => @image})
|
||||||
|
|
||||||
|
user = refresh_record(user)
|
||||||
|
assert user.info.background["type"] == "Image"
|
||||||
|
assert %{"url" => _} = json_response(conn, 200)
|
||||||
|
end
|
||||||
|
|
||||||
|
test "background image can be reset", %{conn: conn} do
|
||||||
|
user = insert(:user)
|
||||||
|
|
||||||
|
conn =
|
||||||
|
conn
|
||||||
|
|> assign(:user, user)
|
||||||
|
|> patch("/api/v1/accounts/update_background", %{"img" => ""})
|
||||||
|
|
||||||
|
user = refresh_record(user)
|
||||||
|
assert user.info.background == %{}
|
||||||
|
assert %{"url" => nil} = json_response(conn, 200)
|
||||||
|
end
|
||||||
|
|
||||||
test "creates an oauth app", %{conn: conn} do
|
test "creates an oauth app", %{conn: conn} do
|
||||||
user = insert(:user)
|
user = insert(:user)
|
||||||
app_attrs = build(:oauth_app)
|
app_attrs = build(:oauth_app)
|
||||||
|
|
|
@ -40,6 +40,18 @@ test "it updates the banner", %{conn: conn} do
|
||||||
user = refresh_record(user)
|
user = refresh_record(user)
|
||||||
assert user.info.banner["type"] == "Image"
|
assert user.info.banner["type"] == "Image"
|
||||||
end
|
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
|
end
|
||||||
|
|
||||||
describe "POST /api/qvitter/update_background_image" do
|
describe "POST /api/qvitter/update_background_image" do
|
||||||
|
@ -54,6 +66,18 @@ test "it updates the background", %{conn: conn} do
|
||||||
user = refresh_record(user)
|
user = refresh_record(user)
|
||||||
assert user.info.background["type"] == "Image"
|
assert user.info.background["type"] == "Image"
|
||||||
end
|
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
|
end
|
||||||
|
|
||||||
describe "POST /api/account/verify_credentials" do
|
describe "POST /api/account/verify_credentials" do
|
||||||
|
@ -821,6 +845,19 @@ test "with credentials", %{conn: conn, user: current_user} do
|
||||||
assert json_response(conn, 200) ==
|
assert json_response(conn, 200) ==
|
||||||
UserView.render("show.json", %{user: current_user, for: current_user})
|
UserView.render("show.json", %{user: current_user, for: current_user})
|
||||||
end
|
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
|
end
|
||||||
|
|
||||||
describe "GET /api/qvitter/mutes.json" do
|
describe "GET /api/qvitter/mutes.json" do
|
||||||
|
|
Loading…
Reference in a new issue