Browse Source

New mix task: pleroma.user reset_mfa <nickname>

namespace-move-notification
Haelwenn (lanodan) Monnier 4 years ago
parent
commit
40970f6bb9
No known key found for this signature in database GPG Key ID: D5B7A8E43C997DEE
3 changed files with 52 additions and 0 deletions
  1. +10
    -0
      docs/administration/CLI_tasks/user.md
  2. +12
    -0
      lib/mix/tasks/pleroma/user.ex
  3. +30
    -0
      test/tasks/user_test.exs

+ 10
- 0
docs/administration/CLI_tasks/user.md View File

@@ -135,6 +135,16 @@ mix pleroma.user reset_password <nickname>
```


## Disable Multi Factor Authentication (MFA/2FA) for a user
```sh tab="OTP"
./bin/pleroma_ctl user reset_mfa <nickname>
```

```sh tab="From Source"
mix pleroma.user reset_mfa <nickname>
```


## Set the value of the given user's settings
```sh tab="OTP"
./bin/pleroma_ctl user set <nickname> [option ...]


+ 12
- 0
lib/mix/tasks/pleroma/user.ex View File

@@ -144,6 +144,18 @@ defmodule Mix.Tasks.Pleroma.User do
end
end

def run(["reset_mfa", nickname]) do
start_pleroma()

with %User{local: true} = user <- User.get_cached_by_nickname(nickname),
{:ok, _token} <- Pleroma.MFA.disable(user) do
shell_info("Multi-Factor Authentication disabled for #{user.nickname}")
else
_ ->
shell_error("No local user #{nickname}")
end
end

def run(["deactivate", nickname]) do
start_pleroma()



+ 30
- 0
test/tasks/user_test.exs View File

@@ -4,6 +4,7 @@

defmodule Mix.Tasks.Pleroma.UserTest do
alias Pleroma.Activity
alias Pleroma.MFA
alias Pleroma.Object
alias Pleroma.Repo
alias Pleroma.Tests.ObanHelpers
@@ -278,6 +279,35 @@ defmodule Mix.Tasks.Pleroma.UserTest do
end
end

describe "running reset_mfa" do
test "disables MFA" do
user =
insert(:user,
multi_factor_authentication_settings: %MFA.Settings{
enabled: true,
totp: %MFA.Settings.TOTP{secret: "xx", confirmed: true}
}
)

Mix.Tasks.Pleroma.User.run(["reset_mfa", user.nickname])

assert_received {:mix_shell, :info, [message]}
assert message == "Multi-Factor Authentication disabled for #{user.nickname}"

assert %{enabled: false, totp: false} ==
user.nickname
|> User.get_cached_by_nickname()
|> MFA.mfa_settings()
end

test "no user to reset MFA" do
Mix.Tasks.Pleroma.User.run(["reset_password", "nonexistent"])

assert_received {:mix_shell, :error, [message]}
assert message =~ "No local user"
end
end

describe "running invite" do
test "invite token is generated" do
assert capture_io(fn ->


Loading…
Cancel
Save