diff --git a/lib/mix/tasks/mobilizon/users/modify.ex b/lib/mix/tasks/mobilizon/users/modify.ex index ae02ed564..cea9ad4e9 100644 --- a/lib/mix/tasks/mobilizon/users/modify.ex +++ b/lib/mix/tasks/mobilizon/users/modify.ex @@ -16,6 +16,7 @@ defmodule Mix.Tasks.Mobilizon.Users.Modify do rest, strict: [ email: :string, + password: :string, disable: :boolean, enable: :boolean, user: :boolean, @@ -30,6 +31,7 @@ defmodule Mix.Tasks.Mobilizon.Users.Modify do disable? = Keyword.get(options, :disable, false) enable? = Keyword.get(options, :enable, false) new_email = Keyword.get(options, :email) + new_password = Keyword.get(options, :password) if disable? && enable? do shell_error("Can't use both --enable and --disable options at the same time.") @@ -41,6 +43,7 @@ defmodule Mix.Tasks.Mobilizon.Users.Modify do attrs <- %{}, role <- calculate_role(admin?, moderator?, user?), attrs <- process_new_value(attrs, :email, new_email, user.email), + attrs <- process_new_value(attrs, :password, new_password, nil), attrs <- process_new_value(attrs, :role, role, user.role), attrs <- if(disable? && !is_nil(user.confirmed_at), diff --git a/lib/mobilizon/users/user.ex b/lib/mobilizon/users/user.ex index 78427214e..f30cd6370 100644 --- a/lib/mobilizon/users/user.ex +++ b/lib/mobilizon/users/user.ex @@ -107,6 +107,7 @@ defmodule Mobilizon.Users.User do |> validate_required(@required_attrs) |> unique_constraint(:email, message: dgettext("errors", "This email is already used.")) |> Checker.validate_changeset() + |> hash_password() |> validate_length(:password, min: 6, max: 200, diff --git a/test/tasks/users_test.exs b/test/tasks/users_test.exs index bff6acce2..775d4ceca 100644 --- a/test/tasks/users_test.exs +++ b/test/tasks/users_test.exs @@ -310,5 +310,20 @@ defmodule Mix.Tasks.Mobilizon.UsersTest do assert output_received == "An user has been modified with the following information:\n - email: #{@modified_email}\n - Role: #{user.role}\n - account status: Activated on #{confirmed_at} (UTC)\n" end + + @modified_password "new one" + + test "change an user's password" do + insert(:user, email: @email) + Modify.run([@email, "--password", @modified_password]) + + assert {:ok, %User{}} = + Mobilizon.Service.Auth.MobilizonAuthenticator.login(@email, @modified_password) + + Modify.run([@email, "--password", "changed again"]) + + assert {:error, :bad_password} = + Mobilizon.Service.Auth.MobilizonAuthenticator.login(@email, @modified_password) + end end end