Merge branch 'issue/1878' into 'develop'
authorlain <lain@soykaf.club>
Thu, 23 Jul 2020 10:56:33 +0000 (10:56 +0000)
committerlain <lain@soykaf.club>
Thu, 23 Jul 2020 10:56:33 +0000 (10:56 +0000)
[#1878] fix reset confirmation email in admin section

See merge request pleroma/pleroma!2751

1  2 
lib/pleroma/user.ex
test/web/admin_api/controllers/admin_api_controller_test.exs

diff --combined lib/pleroma/user.ex
index 9240e912d9a3db676b6f19a2a95e2b932a4bf661,711258ac703f1fd7e57d16788b255a40b98f1f1b..714ec9a4bac3dd74964f13a5212bfe246bcbe6e5
@@@ -530,21 -530,11 +530,21 @@@ defmodule Pleroma.User d
    end
  
    defp put_emoji(changeset) do
 -    bio = get_change(changeset, :bio)
 -    name = get_change(changeset, :name)
 +    emojified_fields = [:bio, :name, :raw_fields]
 +
 +    if Enum.any?(changeset.changes, fn {k, _} -> k in emojified_fields end) do
 +      bio = Emoji.Formatter.get_emoji_map(get_field(changeset, :bio))
 +      name = Emoji.Formatter.get_emoji_map(get_field(changeset, :name))
 +
 +      emoji = Map.merge(bio, name)
 +
 +      emoji =
 +        changeset
 +        |> get_field(:raw_fields)
 +        |> Enum.reduce(emoji, fn x, acc ->
 +          Map.merge(acc, Emoji.Formatter.get_emoji_map(x["name"] <> x["value"]))
 +        end)
  
 -    if bio || name do
 -      emoji = Map.merge(Emoji.Formatter.get_emoji_map(bio), Emoji.Formatter.get_emoji_map(name))
        put_change(changeset, :emoji, emoji)
      else
        changeset
      end
    end
  
-   def try_send_confirmation_email(%User{} = user) do
-     if user.confirmation_pending &&
-          Config.get([:instance, :account_activation_required]) do
-       user
-       |> Pleroma.Emails.UserEmail.account_confirmation_email()
-       |> Pleroma.Emails.Mailer.deliver_async()
+   @spec try_send_confirmation_email(User.t()) :: {:ok, :enqueued | :noop}
+   def try_send_confirmation_email(%User{confirmation_pending: true} = user) do
+     if Config.get([:instance, :account_activation_required]) do
+       send_confirmation_email(user)
        {:ok, :enqueued}
      else
        {:ok, :noop}
      end
    end
  
-   def try_send_confirmation_email(users) do
-     Enum.each(users, &try_send_confirmation_email/1)
+   def try_send_confirmation_email(_), do: {:ok, :noop}
+   @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
  
    def needs_update?(%User{local: true}), do: false
index da91cd552afb8552695baa21f861c84d3c3d9666,b734a34a517e70e8e052c6bd183065a31b7a3954..6082441ee5e8e032494da8b8810d08ca2be22e0e
@@@ -9,6 -9,7 +9,7 @@@ defmodule Pleroma.Web.AdminAPI.AdminAPI
    import ExUnit.CaptureLog
    import Mock
    import Pleroma.Factory
+   import Swoosh.TestAssertions
  
    alias Pleroma.Activity
    alias Pleroma.Config
      {:ok, %{admin: admin, token: token, conn: conn}}
    end
  
 +  test "with valid `admin_token` query parameter, skips OAuth scopes check" do
 +    clear_config([:admin_token], "password123")
 +
 +    user = insert(:user)
 +
 +    conn = get(build_conn(), "/api/pleroma/admin/users/#{user.nickname}?admin_token=password123")
 +
 +    assert json_response(conn, 200)
 +  end
 +
    describe "with [:auth, :enforce_oauth_admin_scope_usage]," do
      setup do: clear_config([:auth, :enforce_oauth_admin_scope_usage], true)
  
                 "@#{admin.nickname} re-sent confirmation email for users: @#{first_user.nickname}, @#{
                   second_user.nickname
                 }"
+       ObanHelpers.perform_all()
+       assert_email_sent(Pleroma.Emails.UserEmail.account_confirmation_email(first_user))
      end
    end