2.2 KiB · text History 6d24830
defmodule FeedPug.Accounts.UserNotifier do
  import Swoosh.Email

  alias FeedPug.Mailer
  alias FeedPug.Accounts.User

  # Delivers the email using the application mailer. The from name/address come
  # from the Mailer config (config.exs default, overridden in runtime.exs from
  # MAIL_FROM_NAME / MAIL_FROM_ADDRESS).
  defp deliver(recipient, subject, body) do
    mailer_config = Application.get_env(:feed_pug, Mailer, [])
    from_name = Keyword.get(mailer_config, :from_name, "FeedPug")
    from_address = Keyword.get(mailer_config, :from_address, "noreply@localhost")

    email =
      new()
      |> to(recipient)
      |> from({from_name, from_address})
      |> subject(subject)
      |> text_body(body)

    with {:ok, _metadata} <- Mailer.deliver(email) do
      {:ok, email}
    end
  end

  @doc """
  Deliver instructions to update a user email.
  """
  def deliver_update_email_instructions(user, url) do
    deliver(user.email, "Update email instructions", """

    ==============================

    Hi #{user.email},

    You can change your email by visiting the URL below:

    #{url}

    If you didn't request this change, please ignore this.

    ==============================
    """)
  end

  @doc """
  Deliver instructions to log in with a magic link.
  """
  def deliver_login_instructions(user, url) do
    case user do
      %User{confirmed_at: nil} -> deliver_confirmation_instructions(user, url)
      _ -> deliver_magic_link_instructions(user, url)
    end
  end

  defp deliver_magic_link_instructions(user, url) do
    deliver(user.email, "Log in instructions", """

    ==============================

    Hi #{user.email},

    You can log into your account by visiting the URL below:

    #{url}

    If you didn't request this email, please ignore this.

    ==============================
    """)
  end

  defp deliver_confirmation_instructions(user, url) do
    deliver(user.email, "Confirmation instructions", """

    ==============================

    Hi #{user.email},

    You can confirm your account by visiting the URL below:

    #{url}

    If you didn't create an account with us, please ignore this.

    ==============================
    """)
  end
end