Allow dashes in domain name search
[akkoma] / lib / pleroma / emails / user_email.ex
index cd06ab23c808aae80ffe90c37ddd4512f8eabb0d..24adfabd717c885368c18ee733a2a42e1721e32b 100644 (file)
@@ -30,68 +30,75 @@ defmodule Pleroma.Emails.UserEmail do
 
   @spec welcome(User.t(), map()) :: Swoosh.Email.t()
   def welcome(user, opts \\ %{}) do
-    new()
-    |> to(recipient(user))
-    |> from(Map.get(opts, :sender, sender()))
-    |> subject(
-      Map.get(
-        opts,
-        :subject,
-        Gettext.dpgettext("static_pages", "welcome email subject", "Welcome to %{instance_name}!",
-          instance_name: instance_name()
+    Gettext.with_locale_or_default user.language do
+      new()
+      |> to(recipient(user))
+      |> from(Map.get(opts, :sender, sender()))
+      |> subject(
+        Map.get(
+          opts,
+          :subject,
+          Gettext.dpgettext(
+            "static_pages",
+            "welcome email subject",
+            "Welcome to %{instance_name}!",
+            instance_name: instance_name()
+          )
         )
       )
-    )
-    |> html_body(
-      Map.get(
-        opts,
-        :html,
-        Gettext.dpgettext(
-          "static_pages",
-          "welcome email html body",
-          "Welcome to %{instance_name}!",
-          instance_name: instance_name()
+      |> html_body(
+        Map.get(
+          opts,
+          :html,
+          Gettext.dpgettext(
+            "static_pages",
+            "welcome email html body",
+            "Welcome to %{instance_name}!",
+            instance_name: instance_name()
+          )
         )
       )
-    )
-    |> text_body(
-      Map.get(
-        opts,
-        :text,
-        Gettext.dpgettext(
-          "static_pages",
-          "welcome email text body",
-          "Welcome to %{instance_name}!",
-          instance_name: instance_name()
+      |> text_body(
+        Map.get(
+          opts,
+          :text,
+          Gettext.dpgettext(
+            "static_pages",
+            "welcome email text body",
+            "Welcome to %{instance_name}!",
+            instance_name: instance_name()
+          )
         )
       )
-    )
+    end
   end
 
   def password_reset_email(user, token) when is_binary(token) do
-    password_reset_url = Router.Helpers.reset_password_url(Endpoint, :reset, token)
-
-    html_body =
-      Gettext.dpgettext(
-        "static_pages",
-        "password reset email body",
-        """
-        <h3>Reset your password at %{instance_name}</h3>
-        <p>Someone has requested password change for your account at %{instance_name}.</p>
-        <p>If it was you, visit the following link to proceed: <a href="%{password_reset_url}">reset password</a>.</p>
-        <p>If it was someone else, nothing to worry about: your data is secure and your password has not been changed.</p>
-        """,
-        instance_name: instance_name(),
-        password_reset_url: password_reset_url
-      )
+    Gettext.with_locale_or_default user.language do
+      password_reset_url = Router.Helpers.reset_password_url(Endpoint, :reset, token)
+
+      html_body =
+        Gettext.dpgettext(
+          "static_pages",
+          "password reset email body",
+          """
+          <h3>Reset your password at %{instance_name}</h3>
+          <p>Someone has requested password change for your account at %{instance_name}.</p>
+          <p>If it was you, visit the following link to proceed: <a href="%{password_reset_url}">reset password</a>.</p>
+          <p>If it was someone else, nothing to worry about: your data is secure and your password has not been changed.</p>
+          """,
+          instance_name: instance_name(),
+          password_reset_url: password_reset_url
+        )
 
-    new()
-    |> to(recipient(user))
-    |> from(sender())
-    |> subject(
-      Gettext.dpgettext("static_pages", "password reset email subject", "Password reset")
-    )
-    |> html_body(html_body)
+      new()
+      |> to(recipient(user))
+      |> from(sender())
+      |> subject(
+        Gettext.dpgettext("static_pages", "password reset email subject", "Password reset")
+      )
+      |> html_body(html_body)
+    end
   end
 
   def user_invitation_email(
@@ -100,128 +107,136 @@ defmodule Pleroma.Emails.UserEmail do
         to_email,
         to_name \\ nil
       ) do
-    registration_url =
-      Router.Helpers.redirect_url(
-        Endpoint,
-        :registration_page,
-        user_invite_token.token
-      )
+    Gettext.with_locale_or_default user.language do
+      registration_url =
+        Router.Helpers.redirect_url(
+          Endpoint,
+          :registration_page,
+          user_invite_token.token
+        )
 
-    html_body =
-      Gettext.dpgettext(
-        "static_pages",
-        "user invitation email body",
-        """
-        <h3>You are invited to %{instance_name}</h3>
-        <p>%{inviter_name} invites you to join %{instance_name}, an instance of Pleroma federated social networking platform.</p>
-        <p>Click the following link to register: <a href="%{registration_url}">accept invitation</a>.</p>
-        """,
-        instance_name: instance_name(),
-        inviter_name: user.name,
-        registration_url: registration_url
-      )
+      html_body =
+        Gettext.dpgettext(
+          "static_pages",
+          "user invitation email body",
+          """
+          <h3>You are invited to %{instance_name}</h3>
+          <p>%{inviter_name} invites you to join %{instance_name}, an instance of Pleroma federated social networking platform.</p>
+          <p>Click the following link to register: <a href="%{registration_url}">accept invitation</a>.</p>
+          """,
+          instance_name: instance_name(),
+          inviter_name: user.name,
+          registration_url: registration_url
+        )
 
-    new()
-    |> to(recipient(to_email, to_name))
-    |> from(sender())
-    |> subject(
-      Gettext.dpgettext(
-        "static_pages",
-        "user invitation email subject",
-        "Invitation to %{instance_name}",
-        instance_name: instance_name()
+      new()
+      |> to(recipient(to_email, to_name))
+      |> from(sender())
+      |> subject(
+        Gettext.dpgettext(
+          "static_pages",
+          "user invitation email subject",
+          "Invitation to %{instance_name}",
+          instance_name: instance_name()
+        )
       )
-    )
-    |> html_body(html_body)
+      |> html_body(html_body)
+    end
   end
 
   def account_confirmation_email(user) do
-    confirmation_url =
-      Router.Helpers.confirm_email_url(
-        Endpoint,
-        :confirm_email,
-        user.id,
-        to_string(user.confirmation_token)
-      )
+    Gettext.with_locale_or_default user.language do
+      confirmation_url =
+        Router.Helpers.confirm_email_url(
+          Endpoint,
+          :confirm_email,
+          user.id,
+          to_string(user.confirmation_token)
+        )
 
-    html_body =
-      Gettext.dpgettext(
-        "static_pages",
-        "confirmation email body",
-        """
-        <h3>Thank you for registering on %{instance_name}</h3>
-        <p>Email confirmation is required to activate the account.</p>
-        <p>Please click the following link to <a href="%{confirmation_url}">activate your account</a>.</p>
-        """,
-        instance_name: instance_name(),
-        confirmation_url: confirmation_url
-      )
+      html_body =
+        Gettext.dpgettext(
+          "static_pages",
+          "confirmation email body",
+          """
+          <h3>Thank you for registering on %{instance_name}</h3>
+          <p>Email confirmation is required to activate the account.</p>
+          <p>Please click the following link to <a href="%{confirmation_url}">activate your account</a>.</p>
+          """,
+          instance_name: instance_name(),
+          confirmation_url: confirmation_url
+        )
 
-    new()
-    |> to(recipient(user))
-    |> from(sender())
-    |> subject(
-      Gettext.dpgettext(
-        "static_pages",
-        "confirmation email subject",
-        "%{instance_name} account confirmation",
-        instance_name: instance_name()
+      new()
+      |> to(recipient(user))
+      |> from(sender())
+      |> subject(
+        Gettext.dpgettext(
+          "static_pages",
+          "confirmation email subject",
+          "%{instance_name} account confirmation",
+          instance_name: instance_name()
+        )
       )
-    )
-    |> html_body(html_body)
+      |> html_body(html_body)
+    end
   end
 
   def approval_pending_email(user) do
-    html_body =
-      Gettext.dpgettext(
-        "static_pages",
-        "approval pending email body",
-        """
-        <h3>Awaiting Approval</h3>
-        <p>Your account at %{instance_name} is being reviewed by staff. You will receive another email once your account is approved.</p>
-        """,
-        instance_name: instance_name()
-      )
+    Gettext.with_locale_or_default user.language do
+      html_body =
+        Gettext.dpgettext(
+          "static_pages",
+          "approval pending email body",
+          """
+          <h3>Awaiting Approval</h3>
+          <p>Your account at %{instance_name} is being reviewed by staff. You will receive another email once your account is approved.</p>
+          """,
+          instance_name: instance_name()
+        )
 
-    new()
-    |> to(recipient(user))
-    |> from(sender())
-    |> subject(
-      Gettext.dpgettext(
-        "static_pages",
-        "approval pending email subject",
-        "Your account is awaiting approval"
+      new()
+      |> to(recipient(user))
+      |> from(sender())
+      |> subject(
+        Gettext.dpgettext(
+          "static_pages",
+          "approval pending email subject",
+          "Your account is awaiting approval"
+        )
       )
-    )
-    |> html_body(html_body)
+      |> html_body(html_body)
+    end
   end
 
   def successful_registration_email(user) do
-    html_body =
-      Gettext.dpgettext(
-        "static_pages",
-        "successful registration email body",
-        """
-        <h3>Hello @%{nickname},</h3>
-        <p>Your account at %{instance_name} has been registered successfully.</p>
-        <p>No further action is required to activate your account.</p>
-        """,
-        nickname: user.nickname,
-        instance_name: instance_name()
-      )
+    Gettext.with_locale_or_default user.language do
+      html_body =
+        Gettext.dpgettext(
+          "static_pages",
+          "successful registration email body",
+          """
+          <h3>Hello @%{nickname},</h3>
+          <p>Your account at %{instance_name} has been registered successfully.</p>
+          <p>No further action is required to activate your account.</p>
+          """,
+          nickname: user.nickname,
+          instance_name: instance_name()
+        )
 
-    new()
-    |> to(recipient(user))
-    |> from(sender())
-    |> subject(
-      Gettext.dpgettext(
-        "static_pages",
-        "successful registration email subject",
-        "Account registered on %{instance_name}",
-        instance_name: instance_name()
+      new()
+      |> to(recipient(user))
+      |> from(sender())
+      |> subject(
+        Gettext.dpgettext(
+          "static_pages",
+          "successful registration email subject",
+          "Account registered on %{instance_name}",
+          instance_name: instance_name()
+        )
       )
-    )
-    |> html_body(html_body)
+      |> html_body(html_body)
+    end
   end
 
   @doc """
@@ -231,76 +246,78 @@ defmodule Pleroma.Emails.UserEmail do
   """
   @spec digest_email(User.t()) :: Swoosh.Email.t() | nil
   def digest_email(user) do
-    notifications = Pleroma.Notification.for_user_since(user, user.last_digest_emailed_at)
-
-    mentions =
-      notifications
-      |> Enum.filter(&(&1.activity.data["type"] == "Create"))
-      |> Enum.map(fn notification ->
-        object = Pleroma.Object.normalize(notification.activity, fetch: false)
-
-        if not is_nil(object) do
-          object = update_in(object.data["content"], &format_links/1)
-
-          %{
-            data: notification,
-            object: object,
-            from: User.get_by_ap_id(notification.activity.actor)
-          }
-        end
-      end)
-      |> Enum.filter(& &1)
-
-    followers =
-      notifications
-      |> Enum.filter(&(&1.activity.data["type"] == "Follow"))
-      |> Enum.map(fn notification ->
-        from = User.get_by_ap_id(notification.activity.actor)
-
-        if not is_nil(from) do
-          %{
-            data: notification,
-            object: Pleroma.Object.normalize(notification.activity, fetch: false),
-            from: User.get_by_ap_id(notification.activity.actor)
-          }
-        end
-      end)
-      |> Enum.filter(& &1)
-
-    unless Enum.empty?(mentions) do
-      styling = Config.get([__MODULE__, :styling])
-      logo = Config.get([__MODULE__, :logo])
-
-      html_data = %{
-        instance: instance_name(),
-        user: user,
-        mentions: mentions,
-        followers: followers,
-        unsubscribe_link: unsubscribe_url(user, "digest"),
-        styling: styling
-      }
-
-      logo_path =
-        if is_nil(logo) do
-          Path.join(:code.priv_dir(:pleroma), "static/static/logo.svg")
-        else
-          Path.join(Config.get([:instance, :static_dir]), logo)
-        end
-
-      new()
-      |> to(recipient(user))
-      |> from(sender())
-      |> subject(
-        Gettext.dpgettext(
-          "static_pages",
-          "digest email subject",
-          "Your digest from %{instance_name}",
-          instance_name: instance_name()
+    Gettext.with_locale_or_default user.language do
+      notifications = Pleroma.Notification.for_user_since(user, user.last_digest_emailed_at)
+
+      mentions =
+        notifications
+        |> Enum.filter(&(&1.activity.data["type"] == "Create"))
+        |> Enum.map(fn notification ->
+          object = Pleroma.Object.normalize(notification.activity, fetch: false)
+
+          if not is_nil(object) do
+            object = update_in(object.data["content"], &format_links/1)
+
+            %{
+              data: notification,
+              object: object,
+              from: User.get_by_ap_id(notification.activity.actor)
+            }
+          end
+        end)
+        |> Enum.filter(& &1)
+
+      followers =
+        notifications
+        |> Enum.filter(&(&1.activity.data["type"] == "Follow"))
+        |> Enum.map(fn notification ->
+          from = User.get_by_ap_id(notification.activity.actor)
+
+          if not is_nil(from) do
+            %{
+              data: notification,
+              object: Pleroma.Object.normalize(notification.activity, fetch: false),
+              from: User.get_by_ap_id(notification.activity.actor)
+            }
+          end
+        end)
+        |> Enum.filter(& &1)
+
+      unless Enum.empty?(mentions) do
+        styling = Config.get([__MODULE__, :styling])
+        logo = Config.get([__MODULE__, :logo])
+
+        html_data = %{
+          instance: instance_name(),
+          user: user,
+          mentions: mentions,
+          followers: followers,
+          unsubscribe_link: unsubscribe_url(user, "digest"),
+          styling: styling
+        }
+
+        logo_path =
+          if is_nil(logo) do
+            Path.join(:code.priv_dir(:pleroma), "static/static/logo.svg")
+          else
+            Path.join(Config.get([:instance, :static_dir]), logo)
+          end
+
+        new()
+        |> to(recipient(user))
+        |> from(sender())
+        |> subject(
+          Gettext.dpgettext(
+            "static_pages",
+            "digest email subject",
+            "Your digest from %{instance_name}",
+            instance_name: instance_name()
+          )
         )
-      )
-      |> put_layout(false)
-      |> render_body("digest.html", html_data)
-      |> attachment(Swoosh.Attachment.new(logo_path, filename: "logo.svg", type: :inline))
+        |> put_layout(false)
+        |> render_body("digest.html", html_data)
+        |> attachment(Swoosh.Attachment.new(logo_path, filename: "logo.svg", type: :inline))
+      end
     end
   end
 
@@ -330,44 +347,47 @@ defmodule Pleroma.Emails.UserEmail do
 
   def backup_is_ready_email(backup, admin_user_id \\ nil) do
     %{user: user} = Pleroma.Repo.preload(backup, :user)
-    download_url = Pleroma.Web.PleromaAPI.BackupView.download_url(backup)
 
-    html_body =
-      if is_nil(admin_user_id) do
-        Gettext.dpgettext(
-          "static_pages",
-          "account archive email body - self-requested",
-          """
-          <p>You requested a full backup of your Pleroma account. It's ready for download:</p>
-          <p><a href="%{download_url}">%{download_url}</a></p>
-          """,
-          download_url: download_url
-        )
-      else
-        admin = Pleroma.Repo.get(User, admin_user_id)
+    Gettext.with_locale_or_default user.language do
+      download_url = Pleroma.Web.PleromaAPI.BackupView.download_url(backup)
+
+      html_body =
+        if is_nil(admin_user_id) do
+          Gettext.dpgettext(
+            "static_pages",
+            "account archive email body - self-requested",
+            """
+            <p>You requested a full backup of your Pleroma account. It's ready for download:</p>
+            <p><a href="%{download_url}">%{download_url}</a></p>
+            """,
+            download_url: download_url
+          )
+        else
+          admin = Pleroma.Repo.get(User, admin_user_id)
+
+          Gettext.dpgettext(
+            "static_pages",
+            "account archive email body - admin requested",
+            """
+            <p>Admin @%{admin_nickname} requested a full backup of your Pleroma account. It's ready for download:</p>
+            <p><a href="%{download_url}">%{download_url}</a></p>
+            """,
+            admin_nickname: admin.nickname,
+            download_url: download_url
+          )
+        end
 
+      new()
+      |> to(recipient(user))
+      |> from(sender())
+      |> subject(
         Gettext.dpgettext(
           "static_pages",
-          "account archive email body - admin requested",
-          """
-          <p>Admin @%{admin_nickname} requested a full backup of your Pleroma account. It's ready for download:</p>
-          <p><a href="%{download_url}">%{download_url}</a></p>
-          """,
-          admin_nickname: admin.nickname,
-          download_url: download_url
+          "account archive email subject",
+          "Your account archive is ready"
         )
-      end
-
-    new()
-    |> to(recipient(user))
-    |> from(sender())
-    |> subject(
-      Gettext.dpgettext(
-        "static_pages",
-        "account archive email subject",
-        "Your account archive is ready"
       )
-    )
-    |> html_body(html_body)
+      |> html_body(html_body)
+    end
   end
 end