fix reset confirmation email in admin section
This commit is contained in:
parent
d6f67fa91b
commit
62fc8eab0d
6 changed files with 91 additions and 24 deletions
|
@ -16,6 +16,7 @@ defmodule VerifyError, do: defexception([:message])
|
||||||
@spec verify!() :: :ok | VerifyError.t()
|
@spec verify!() :: :ok | VerifyError.t()
|
||||||
def verify! do
|
def verify! do
|
||||||
:ok
|
:ok
|
||||||
|
|> check_confirmation_accounts!
|
||||||
|> check_migrations_applied!()
|
|> check_migrations_applied!()
|
||||||
|> check_rum!()
|
|> check_rum!()
|
||||||
|> handle_result()
|
|> handle_result()
|
||||||
|
@ -24,6 +25,23 @@ def verify! do
|
||||||
defp handle_result(:ok), do: :ok
|
defp handle_result(:ok), do: :ok
|
||||||
defp handle_result({:error, message}), do: raise(VerifyError, message: message)
|
defp handle_result({:error, message}), do: raise(VerifyError, message: message)
|
||||||
|
|
||||||
|
# Checks account confirmation email
|
||||||
|
#
|
||||||
|
def check_confirmation_accounts!(:ok) do
|
||||||
|
if Pleroma.Config.get([:instance, :account_activation_required]) &&
|
||||||
|
not Pleroma.Config.get([Pleroma.Emails.Mailer, :enabled]) do
|
||||||
|
Logger.error(
|
||||||
|
"To use confirmation an user account need to enable and setting mailer.\nIf you want to start Pleroma anyway, set\nconfig :pleroma, :instance, account_activation_required: false\nOtherwise setup and enable mailer."
|
||||||
|
)
|
||||||
|
|
||||||
|
{:error, "Confirmation account: Mailer is disabled"}
|
||||||
|
else
|
||||||
|
:ok
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def check_confirmation_accounts!(result), do: result
|
||||||
|
|
||||||
# Checks for pending migrations.
|
# Checks for pending migrations.
|
||||||
#
|
#
|
||||||
def check_migrations_applied!(:ok) do
|
def check_migrations_applied!(:ok) do
|
||||||
|
|
|
@ -709,21 +709,25 @@ def post_register_action(%User{} = user) do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def try_send_confirmation_email(%User{} = user) do
|
@spec try_send_confirmation_email(User.t()) :: {:ok, :enqueued | :noop}
|
||||||
if user.confirmation_pending &&
|
def try_send_confirmation_email(%User{confirmation_pending: true} = user) do
|
||||||
Config.get([:instance, :account_activation_required]) do
|
if Config.get([:instance, :account_activation_required]) do
|
||||||
user
|
send_confirmation_email(user)
|
||||||
|> Pleroma.Emails.UserEmail.account_confirmation_email()
|
|
||||||
|> Pleroma.Emails.Mailer.deliver_async()
|
|
||||||
|
|
||||||
{:ok, :enqueued}
|
{:ok, :enqueued}
|
||||||
else
|
else
|
||||||
{:ok, :noop}
|
{:ok, :noop}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def try_send_confirmation_email(users) do
|
def try_send_confirmation_email(_), do: {:ok, :noop}
|
||||||
Enum.each(users, &try_send_confirmation_email/1)
|
|
||||||
|
@spec send_confirmation_email(Uset.t()) :: User.t()
|
||||||
|
def send_confirmation_email(%User{} = user) do
|
||||||
|
user
|
||||||
|
|> Pleroma.Emails.UserEmail.account_confirmation_email()
|
||||||
|
|> Pleroma.Emails.Mailer.deliver_async()
|
||||||
|
|
||||||
|
user
|
||||||
end
|
end
|
||||||
|
|
||||||
def needs_update?(%User{local: true}), do: false
|
def needs_update?(%User{local: true}), do: false
|
||||||
|
|
|
@ -616,29 +616,24 @@ def reload_emoji(conn, _params) do
|
||||||
end
|
end
|
||||||
|
|
||||||
def confirm_email(%{assigns: %{user: admin}} = conn, %{"nicknames" => nicknames}) do
|
def confirm_email(%{assigns: %{user: admin}} = conn, %{"nicknames" => nicknames}) do
|
||||||
users = nicknames |> Enum.map(&User.get_cached_by_nickname/1)
|
users = Enum.map(nicknames, &User.get_cached_by_nickname/1)
|
||||||
|
|
||||||
User.toggle_confirmation(users)
|
User.toggle_confirmation(users)
|
||||||
|
|
||||||
ModerationLog.insert_log(%{
|
ModerationLog.insert_log(%{actor: admin, subject: users, action: "confirm_email"})
|
||||||
actor: admin,
|
|
||||||
subject: users,
|
|
||||||
action: "confirm_email"
|
|
||||||
})
|
|
||||||
|
|
||||||
json(conn, "")
|
json(conn, "")
|
||||||
end
|
end
|
||||||
|
|
||||||
def resend_confirmation_email(%{assigns: %{user: admin}} = conn, %{"nicknames" => nicknames}) do
|
def resend_confirmation_email(%{assigns: %{user: admin}} = conn, %{"nicknames" => nicknames}) do
|
||||||
users = nicknames |> Enum.map(&User.get_cached_by_nickname/1)
|
users =
|
||||||
|
Enum.map(nicknames, fn nickname ->
|
||||||
|
nickname
|
||||||
|
|> User.get_cached_by_nickname()
|
||||||
|
|> User.send_confirmation_email()
|
||||||
|
end)
|
||||||
|
|
||||||
User.try_send_confirmation_email(users)
|
ModerationLog.insert_log(%{actor: admin, subject: users, action: "resend_confirmation_email"})
|
||||||
|
|
||||||
ModerationLog.insert_log(%{
|
|
||||||
actor: admin,
|
|
||||||
subject: users,
|
|
||||||
action: "resend_confirmation_email"
|
|
||||||
})
|
|
||||||
|
|
||||||
json(conn, "")
|
json(conn, "")
|
||||||
end
|
end
|
||||||
|
|
|
@ -9,6 +9,42 @@ defmodule Pleroma.ApplicationRequirementsTest do
|
||||||
|
|
||||||
alias Pleroma.Repo
|
alias Pleroma.Repo
|
||||||
|
|
||||||
|
describe "check_confirmation_accounts!" do
|
||||||
|
setup_with_mocks([
|
||||||
|
{Pleroma.ApplicationRequirements, [:passthrough],
|
||||||
|
[
|
||||||
|
check_migrations_applied!: fn _ -> :ok end
|
||||||
|
]}
|
||||||
|
]) do
|
||||||
|
:ok
|
||||||
|
end
|
||||||
|
|
||||||
|
setup do: clear_config([:instance, :account_activation_required])
|
||||||
|
|
||||||
|
test "raises if account confirmation is required but mailer isn't enable" do
|
||||||
|
Pleroma.Config.put([:instance, :account_activation_required], true)
|
||||||
|
Pleroma.Config.put([Pleroma.Emails.Mailer, :enabled], false)
|
||||||
|
|
||||||
|
assert_raise Pleroma.ApplicationRequirements.VerifyError,
|
||||||
|
"Confirmation account: Mailer is disabled",
|
||||||
|
fn ->
|
||||||
|
capture_log(&Pleroma.ApplicationRequirements.verify!/0)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
test "doesn't do anything if account confirmation is disabled" do
|
||||||
|
Pleroma.Config.put([:instance, :account_activation_required], false)
|
||||||
|
Pleroma.Config.put([Pleroma.Emails.Mailer, :enabled], false)
|
||||||
|
assert Pleroma.ApplicationRequirements.verify!() == :ok
|
||||||
|
end
|
||||||
|
|
||||||
|
test "doesn't do anything if account confirmation is required and mailer is enabled" do
|
||||||
|
Pleroma.Config.put([:instance, :account_activation_required], true)
|
||||||
|
Pleroma.Config.put([Pleroma.Emails.Mailer, :enabled], true)
|
||||||
|
assert Pleroma.ApplicationRequirements.verify!() == :ok
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe "check_rum!" do
|
describe "check_rum!" do
|
||||||
setup_with_mocks([
|
setup_with_mocks([
|
||||||
{Pleroma.ApplicationRequirements, [:passthrough],
|
{Pleroma.ApplicationRequirements, [:passthrough],
|
||||||
|
|
|
@ -17,6 +17,7 @@ defmodule Pleroma.UserTest do
|
||||||
|
|
||||||
import Pleroma.Factory
|
import Pleroma.Factory
|
||||||
import ExUnit.CaptureLog
|
import ExUnit.CaptureLog
|
||||||
|
import Swoosh.TestAssertions
|
||||||
|
|
||||||
setup_all do
|
setup_all do
|
||||||
Tesla.Mock.mock_global(fn env -> apply(HttpRequestMock, :request, [env]) end)
|
Tesla.Mock.mock_global(fn env -> apply(HttpRequestMock, :request, [env]) end)
|
||||||
|
@ -385,9 +386,11 @@ test "fetches correct profile for nickname beginning with number" do
|
||||||
password_confirmation: "test",
|
password_confirmation: "test",
|
||||||
email: "email@example.com"
|
email: "email@example.com"
|
||||||
}
|
}
|
||||||
|
|
||||||
setup do: clear_config([:instance, :autofollowed_nicknames])
|
setup do: clear_config([:instance, :autofollowed_nicknames])
|
||||||
setup do: clear_config([:instance, :welcome_message])
|
setup do: clear_config([:instance, :welcome_message])
|
||||||
setup do: clear_config([:instance, :welcome_user_nickname])
|
setup do: clear_config([:instance, :welcome_user_nickname])
|
||||||
|
setup do: clear_config([:instance, :account_activation_required])
|
||||||
|
|
||||||
test "it autofollows accounts that are set for it" do
|
test "it autofollows accounts that are set for it" do
|
||||||
user = insert(:user)
|
user = insert(:user)
|
||||||
|
@ -421,7 +424,14 @@ test "it sends a welcome message if it is set" do
|
||||||
assert activity.actor == welcome_user.ap_id
|
assert activity.actor == welcome_user.ap_id
|
||||||
end
|
end
|
||||||
|
|
||||||
setup do: clear_config([:instance, :account_activation_required])
|
test "it sends a confirm email" do
|
||||||
|
Pleroma.Config.put([:instance, :account_activation_required], true)
|
||||||
|
|
||||||
|
cng = User.register_changeset(%User{}, @full_user_data)
|
||||||
|
{:ok, registered_user} = User.register(cng)
|
||||||
|
ObanHelpers.perform_all()
|
||||||
|
assert_email_sent(Pleroma.Emails.UserEmail.account_confirmation_email(registered_user))
|
||||||
|
end
|
||||||
|
|
||||||
test "it requires an email, name, nickname and password, bio is optional when account_activation_required is enabled" do
|
test "it requires an email, name, nickname and password, bio is optional when account_activation_required is enabled" do
|
||||||
Pleroma.Config.put([:instance, :account_activation_required], true)
|
Pleroma.Config.put([:instance, :account_activation_required], true)
|
||||||
|
|
|
@ -9,6 +9,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
|
||||||
import ExUnit.CaptureLog
|
import ExUnit.CaptureLog
|
||||||
import Mock
|
import Mock
|
||||||
import Pleroma.Factory
|
import Pleroma.Factory
|
||||||
|
import Swoosh.TestAssertions
|
||||||
|
|
||||||
alias Pleroma.Activity
|
alias Pleroma.Activity
|
||||||
alias Pleroma.Config
|
alias Pleroma.Config
|
||||||
|
@ -1721,6 +1722,9 @@ test "it resend emails for two users", %{conn: conn, admin: admin} do
|
||||||
"@#{admin.nickname} re-sent confirmation email for users: @#{first_user.nickname}, @#{
|
"@#{admin.nickname} re-sent confirmation email for users: @#{first_user.nickname}, @#{
|
||||||
second_user.nickname
|
second_user.nickname
|
||||||
}"
|
}"
|
||||||
|
|
||||||
|
ObanHelpers.perform_all()
|
||||||
|
assert_email_sent(Pleroma.Emails.UserEmail.account_confirmation_email(first_user))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue