Show more informative errors when profile exceeds char limits
This commit is contained in:
parent
5433742faf
commit
2c66f584b5
1
changelog.d/update-credentials-limit-error.fix
Normal file
1
changelog.d/update-credentials-limit-error.fix
Normal file
@ -0,0 +1 @@
|
|||||||
|
Show more informative errors when profile exceeds char limits
|
@ -263,6 +263,18 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do
|
|||||||
{:error, %Ecto.Changeset{errors: [background: {"file is too large", _}]}} ->
|
{:error, %Ecto.Changeset{errors: [background: {"file is too large", _}]}} ->
|
||||||
render_error(conn, :request_entity_too_large, "File is too large")
|
render_error(conn, :request_entity_too_large, "File is too large")
|
||||||
|
|
||||||
|
{:error, %Ecto.Changeset{errors: [{:bio, {_, _}} | _]}} ->
|
||||||
|
render_error(conn, :request_entity_too_large, "Bio is too long")
|
||||||
|
|
||||||
|
{:error, %Ecto.Changeset{errors: [{:name, {_, _}} | _]}} ->
|
||||||
|
render_error(conn, :request_entity_too_large, "Name is too long")
|
||||||
|
|
||||||
|
{:error, %Ecto.Changeset{errors: [{:fields, {"invalid", _}} | _]}} ->
|
||||||
|
render_error(conn, :request_entity_too_large, "One or more field entries are too long")
|
||||||
|
|
||||||
|
{:error, %Ecto.Changeset{errors: [{:fields, {_, _}} | _]}} ->
|
||||||
|
render_error(conn, :request_entity_too_large, "Too many field entries")
|
||||||
|
|
||||||
_e ->
|
_e ->
|
||||||
render_error(conn, :forbidden, "Invalid request")
|
render_error(conn, :forbidden, "Invalid request")
|
||||||
end
|
end
|
||||||
|
@ -97,6 +97,42 @@ defmodule Pleroma.Web.MastodonAPI.UpdateCredentialsTest do
|
|||||||
assert user.raw_bio == raw_bio
|
assert user.raw_bio == raw_bio
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "updating bio honours bio limit", %{conn: conn} do
|
||||||
|
bio_limit = Config.get([:instance, :user_bio_length], 5000)
|
||||||
|
|
||||||
|
raw_bio = String.duplicate(".", bio_limit + 1)
|
||||||
|
|
||||||
|
conn = patch(conn, "/api/v1/accounts/update_credentials", %{"note" => raw_bio})
|
||||||
|
|
||||||
|
assert %{"error" => "Bio is too long"} = json_response_and_validate_schema(conn, 413)
|
||||||
|
end
|
||||||
|
|
||||||
|
test "updating name honours name limit", %{conn: conn} do
|
||||||
|
name_limit = Config.get([:instance, :user_name_length], 100)
|
||||||
|
|
||||||
|
name = String.duplicate(".", name_limit + 1)
|
||||||
|
|
||||||
|
conn = patch(conn, "/api/v1/accounts/update_credentials", %{"display_name" => name})
|
||||||
|
|
||||||
|
assert %{"error" => "Name is too long"} = json_response_and_validate_schema(conn, 413)
|
||||||
|
end
|
||||||
|
|
||||||
|
test "when both name and bio exceeds the limit, display name error", %{conn: conn} do
|
||||||
|
name_limit = Config.get([:instance, :user_name_length], 100)
|
||||||
|
bio_limit = Config.get([:instance, :user_bio_length], 5000)
|
||||||
|
|
||||||
|
name = String.duplicate(".", name_limit + 1)
|
||||||
|
raw_bio = String.duplicate(".", bio_limit + 1)
|
||||||
|
|
||||||
|
conn =
|
||||||
|
patch(conn, "/api/v1/accounts/update_credentials", %{
|
||||||
|
"display_name" => name,
|
||||||
|
"note" => raw_bio
|
||||||
|
})
|
||||||
|
|
||||||
|
assert %{"error" => "Name is too long"} = json_response_and_validate_schema(conn, 413)
|
||||||
|
end
|
||||||
|
|
||||||
test "updates the user's locking status", %{conn: conn} do
|
test "updates the user's locking status", %{conn: conn} do
|
||||||
conn = patch(conn, "/api/v1/accounts/update_credentials", %{locked: "true"})
|
conn = patch(conn, "/api/v1/accounts/update_credentials", %{locked: "true"})
|
||||||
|
|
||||||
@ -595,17 +631,17 @@ defmodule Pleroma.Web.MastodonAPI.UpdateCredentialsTest do
|
|||||||
|
|
||||||
fields = [%{"name" => "foo", "value" => long_value}]
|
fields = [%{"name" => "foo", "value" => long_value}]
|
||||||
|
|
||||||
assert %{"error" => "Invalid request"} ==
|
assert %{"error" => "One or more field entries are too long"} ==
|
||||||
conn
|
conn
|
||||||
|> patch("/api/v1/accounts/update_credentials", %{"fields_attributes" => fields})
|
|> patch("/api/v1/accounts/update_credentials", %{"fields_attributes" => fields})
|
||||||
|> json_response_and_validate_schema(403)
|
|> json_response_and_validate_schema(413)
|
||||||
|
|
||||||
fields = [%{"name" => long_name, "value" => "bar"}]
|
fields = [%{"name" => long_name, "value" => "bar"}]
|
||||||
|
|
||||||
assert %{"error" => "Invalid request"} ==
|
assert %{"error" => "One or more field entries are too long"} ==
|
||||||
conn
|
conn
|
||||||
|> patch("/api/v1/accounts/update_credentials", %{"fields_attributes" => fields})
|
|> patch("/api/v1/accounts/update_credentials", %{"fields_attributes" => fields})
|
||||||
|> json_response_and_validate_schema(403)
|
|> json_response_and_validate_schema(413)
|
||||||
|
|
||||||
clear_config([:instance, :max_account_fields], 1)
|
clear_config([:instance, :max_account_fields], 1)
|
||||||
|
|
||||||
@ -614,10 +650,10 @@ defmodule Pleroma.Web.MastodonAPI.UpdateCredentialsTest do
|
|||||||
%{"name" => "link", "value" => "cofe.io"}
|
%{"name" => "link", "value" => "cofe.io"}
|
||||||
]
|
]
|
||||||
|
|
||||||
assert %{"error" => "Invalid request"} ==
|
assert %{"error" => "Too many field entries"} ==
|
||||||
conn
|
conn
|
||||||
|> patch("/api/v1/accounts/update_credentials", %{"fields_attributes" => fields})
|
|> patch("/api/v1/accounts/update_credentials", %{"fields_attributes" => fields})
|
||||||
|> json_response_and_validate_schema(403)
|
|> json_response_and_validate_schema(413)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user