validate actor type
This commit is contained in:
parent
cf139b06a3
commit
3249141588
4 changed files with 60 additions and 11 deletions
|
@ -511,7 +511,23 @@ Note: Available `:permission_group` is currently moderator and admin. 404 is ret
|
||||||
- `discoverable`
|
- `discoverable`
|
||||||
- `actor_type`
|
- `actor_type`
|
||||||
|
|
||||||
- Response: none (code `200`)
|
- Response:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{"status": "success"}
|
||||||
|
```
|
||||||
|
|
||||||
|
```json
|
||||||
|
{"errors":
|
||||||
|
{"actor_type": "is invalid"},
|
||||||
|
{"email": "has invalid format"},
|
||||||
|
...
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
```json
|
||||||
|
{"error": "Unable to update user."}
|
||||||
|
```
|
||||||
|
|
||||||
## `GET /api/pleroma/admin/reports`
|
## `GET /api/pleroma/admin/reports`
|
||||||
|
|
||||||
|
|
|
@ -538,9 +538,10 @@ def update_as_admin_changeset(struct, params) do
|
||||||
|> delete_change(:also_known_as)
|
|> delete_change(:also_known_as)
|
||||||
|> unique_constraint(:email)
|
|> unique_constraint(:email)
|
||||||
|> validate_format(:email, @email_regex)
|
|> validate_format(:email, @email_regex)
|
||||||
|
|> validate_inclusion(:actor_type, ["Person", "Service"])
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec update_as_admin(%User{}, map) :: {:ok, User.t()} | {:error, Ecto.Changeset.t()}
|
@spec update_as_admin(User.t(), map()) :: {:ok, User.t()} | {:error, Changeset.t()}
|
||||||
def update_as_admin(user, params) do
|
def update_as_admin(user, params) do
|
||||||
params = Map.put(params, "password_confirmation", params["password"])
|
params = Map.put(params, "password_confirmation", params["password"])
|
||||||
changeset = update_as_admin_changeset(user, params)
|
changeset = update_as_admin_changeset(user, params)
|
||||||
|
@ -561,7 +562,7 @@ def password_update_changeset(struct, params) do
|
||||||
|> put_change(:password_reset_pending, false)
|
|> put_change(:password_reset_pending, false)
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec reset_password(User.t(), map) :: {:ok, User.t()} | {:error, Ecto.Changeset.t()}
|
@spec reset_password(User.t(), map()) :: {:ok, User.t()} | {:error, Changeset.t()}
|
||||||
def reset_password(%User{} = user, params) do
|
def reset_password(%User{} = user, params) do
|
||||||
reset_password(user, user, params)
|
reset_password(user, user, params)
|
||||||
end
|
end
|
||||||
|
|
|
@ -693,7 +693,7 @@ def update_user_credentials(
|
||||||
%{assigns: %{user: admin}} = conn,
|
%{assigns: %{user: admin}} = conn,
|
||||||
%{"nickname" => nickname} = params
|
%{"nickname" => nickname} = params
|
||||||
) do
|
) do
|
||||||
with {_, user} <- {:user, User.get_cached_by_nickname(nickname)},
|
with {_, %User{} = user} <- {:user, User.get_cached_by_nickname(nickname)},
|
||||||
{:ok, _user} <-
|
{:ok, _user} <-
|
||||||
User.update_as_admin(user, params) do
|
User.update_as_admin(user, params) do
|
||||||
ModerationLog.insert_log(%{
|
ModerationLog.insert_log(%{
|
||||||
|
@ -715,11 +715,16 @@ def update_user_credentials(
|
||||||
json(conn, %{status: "success"})
|
json(conn, %{status: "success"})
|
||||||
else
|
else
|
||||||
{:error, changeset} ->
|
{:error, changeset} ->
|
||||||
{_, {error, _}} = Enum.at(changeset.errors, 0)
|
errors =
|
||||||
json(conn, %{error: "New password #{error}."})
|
Enum.reduce(changeset.errors, %{}, fn
|
||||||
|
{key, {error, _}}, acc ->
|
||||||
|
Map.put(acc, key, error)
|
||||||
|
end)
|
||||||
|
|
||||||
|
json(conn, %{errors: errors})
|
||||||
|
|
||||||
_ ->
|
_ ->
|
||||||
json(conn, %{error: "Unable to change password."})
|
json(conn, %{error: "Unable to update user."})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -3191,8 +3191,12 @@ test "returns 403 if requested by a non-admin" do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "PATCH /users/:nickname/credentials" do
|
describe "PATCH /users/:nickname/credentials" do
|
||||||
test "changes password and email", %{conn: conn, admin: admin} do
|
setup do
|
||||||
user = insert(:user)
|
user = insert(:user)
|
||||||
|
[user: user]
|
||||||
|
end
|
||||||
|
|
||||||
|
test "changes password and email", %{conn: conn, admin: admin, user: user} do
|
||||||
assert user.password_reset_pending == false
|
assert user.password_reset_pending == false
|
||||||
|
|
||||||
conn =
|
conn =
|
||||||
|
@ -3222,9 +3226,7 @@ test "changes password and email", %{conn: conn, admin: admin} do
|
||||||
"@#{admin.nickname} forced password reset for users: @#{user.nickname}"
|
"@#{admin.nickname} forced password reset for users: @#{user.nickname}"
|
||||||
end
|
end
|
||||||
|
|
||||||
test "returns 403 if requested by a non-admin" do
|
test "returns 403 if requested by a non-admin", %{user: user} do
|
||||||
user = insert(:user)
|
|
||||||
|
|
||||||
conn =
|
conn =
|
||||||
build_conn()
|
build_conn()
|
||||||
|> assign(:user, user)
|
|> assign(:user, user)
|
||||||
|
@ -3236,6 +3238,31 @@ test "returns 403 if requested by a non-admin" do
|
||||||
|
|
||||||
assert json_response(conn, :forbidden)
|
assert json_response(conn, :forbidden)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "changes actor type from permitted list", %{conn: conn, user: user} do
|
||||||
|
assert user.actor_type == "Person"
|
||||||
|
|
||||||
|
assert patch(conn, "/api/pleroma/admin/users/#{user.nickname}/credentials", %{
|
||||||
|
"actor_type" => "Service"
|
||||||
|
})
|
||||||
|
|> json_response(200) == %{"status" => "success"}
|
||||||
|
|
||||||
|
updated_user = User.get_by_id(user.id)
|
||||||
|
|
||||||
|
assert updated_user.actor_type == "Service"
|
||||||
|
|
||||||
|
assert patch(conn, "/api/pleroma/admin/users/#{user.nickname}/credentials", %{
|
||||||
|
"actor_type" => "Application"
|
||||||
|
})
|
||||||
|
|> json_response(200) == %{"errors" => %{"actor_type" => "is invalid"}}
|
||||||
|
end
|
||||||
|
|
||||||
|
test "update non existing user", %{conn: conn} do
|
||||||
|
assert patch(conn, "/api/pleroma/admin/users/non-existing/credentials", %{
|
||||||
|
"password" => "new_password"
|
||||||
|
})
|
||||||
|
|> json_response(200) == %{"error" => "Unable to update user."}
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "PATCH /users/:nickname/force_password_reset" do
|
describe "PATCH /users/:nickname/force_password_reset" do
|
||||||
|
|
Loading…
Reference in a new issue