Admin API: PATCH /api/pleroma/admin/users/:nickname/change_password

This commit is contained in:
eugenijm 2020-01-28 09:47:59 +03:00
commit d198e7fa2a
6 changed files with 80 additions and 0 deletions

View file

@ -605,6 +605,17 @@ defmodule Pleroma.ModerationLog do
}"
end
@spec get_log_entry_message(ModerationLog) :: String.t()
def get_log_entry_message(%ModerationLog{
data: %{
"actor" => %{"nickname" => actor_nickname},
"action" => "change_password",
"subject" => subjects
}
}) do
"@#{actor_nickname} changed password for users: #{users_to_nicknames_string(subjects)}"
end
defp nicknames_to_string(nicknames) do
nicknames
|> Enum.map(&"@#{&1}")

View file

@ -658,6 +658,39 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do
json_response(conn, :no_content, "")
end
@doc "Changes password for a given user"
def change_password(%{assigns: %{user: admin}} = conn, %{"nickname" => nickname} = params) do
with {_, user} <- {:user, User.get_cached_by_nickname(nickname)},
{:ok, _user} <-
User.reset_password(user, %{
password: params["new_password"],
password_confirmation: params["new_password"]
}) do
ModerationLog.insert_log(%{
actor: admin,
subject: [user],
action: "change_password"
})
User.force_password_reset_async(user)
ModerationLog.insert_log(%{
actor: admin,
subject: [user],
action: "force_password_reset"
})
json(conn, %{status: "success"})
else
{:error, changeset} ->
{_, {error, _}} = Enum.at(changeset.errors, 0)
json(conn, %{error: "New password #{error}."})
_ ->
json(conn, %{error: "Unable to change password."})
end
end
def list_reports(conn, params) do
{page, page_size} = page_params(params)

View file

@ -173,6 +173,7 @@ defmodule Pleroma.Web.Router do
get("/users/:nickname/password_reset", AdminAPIController, :get_password_reset)
patch("/users/force_password_reset", AdminAPIController, :force_password_reset)
patch("/users/:nickname/change_password", AdminAPIController, :change_password)
get("/users", AdminAPIController, :list_users)
get("/users/:nickname", AdminAPIController, :user_show)