forked from AkkomaGang/akkoma
New mix task: pleroma.user reset_mfa <nickname>
This commit is contained in:
parent
7aa6c82937
commit
40970f6bb9
3 changed files with 52 additions and 0 deletions
|
@ -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
|
## Set the value of the given user's settings
|
||||||
```sh tab="OTP"
|
```sh tab="OTP"
|
||||||
./bin/pleroma_ctl user set <nickname> [option ...]
|
./bin/pleroma_ctl user set <nickname> [option ...]
|
||||||
|
|
|
@ -144,6 +144,18 @@ def run(["reset_password", nickname]) do
|
||||||
end
|
end
|
||||||
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
|
def run(["deactivate", nickname]) do
|
||||||
start_pleroma()
|
start_pleroma()
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
|
|
||||||
defmodule Mix.Tasks.Pleroma.UserTest do
|
defmodule Mix.Tasks.Pleroma.UserTest do
|
||||||
alias Pleroma.Activity
|
alias Pleroma.Activity
|
||||||
|
alias Pleroma.MFA
|
||||||
alias Pleroma.Object
|
alias Pleroma.Object
|
||||||
alias Pleroma.Repo
|
alias Pleroma.Repo
|
||||||
alias Pleroma.Tests.ObanHelpers
|
alias Pleroma.Tests.ObanHelpers
|
||||||
|
@ -278,6 +279,35 @@ test "no user to reset password" do
|
||||||
end
|
end
|
||||||
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
|
describe "running invite" do
|
||||||
test "invite token is generated" do
|
test "invite token is generated" do
|
||||||
assert capture_io(fn ->
|
assert capture_io(fn ->
|
||||||
|
|
Loading…
Reference in a new issue