X-Git-Url: http://git.squeep.com/?a=blobdiff_plain;f=lib%2Fpleroma%2Femails%2Fuser_email.ex;h=1588c099c0a6dc017bb5f74fa9fccfc52c48e3f7;hb=a079ec3a3cdfd42d2cbd51c7698c2c87828e5778;hp=9cdf002f30eaf2b8b7e50c47dd2bcb09eb93ea4f;hpb=30dc81667c56216e712564975ed60c062676490b;p=akkoma
diff --git a/lib/pleroma/emails/user_email.ex b/lib/pleroma/emails/user_email.ex
index 9cdf002f3..1588c099c 100644
--- a/lib/pleroma/emails/user_email.ex
+++ b/lib/pleroma/emails/user_email.ex
@@ -1,40 +1,393 @@
-defmodule Pleroma.UserEmail do
- @moduledoc "User emails"
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2021 Pleroma Authors
Someone has requested password change for your account at %{instance_name}.
+If it was you, visit the following link to proceed: reset password.
+If it was someone else, nothing to worry about: your data is secure and your password has not been changed.
+ """, + 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) + end + end + + def user_invitation_email( + user, + %Pleroma.UserInviteToken{} = user_invite_token, + to_email, + to_name \\ nil + ) do + 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", + """ +%{inviter_name} invites you to join %{instance_name}, an instance of Akkoma federated social networking platform.
+Click the following link to register: accept invitation.
+ """, + 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() + ) + ) + |> html_body(html_body) + end + end + + def account_confirmation_email(user) do + 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", + """ +Email confirmation is required to activate the account.
+Please click the following link to activate your account.
+ """, + 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() + ) + ) + |> html_body(html_body) + end + end + + def approval_pending_email(user) do + Gettext.with_locale_or_default user.language do + html_body = + Gettext.dpgettext( + "static_pages", + "approval pending email body", + """ +Your account at %{instance_name} is being reviewed by staff. You will receive another email once your account is approved.
+ """, + instance_name: instance_name() + ) + + new() + |> to(recipient(user)) + |> from(sender()) + |> subject( + Gettext.dpgettext( + "static_pages", + "approval pending email subject", + "Your account is awaiting approval" + ) + ) + |> html_body(html_body) + end + end + + def successful_registration_email(user) do + Gettext.with_locale_or_default user.language do + html_body = + Gettext.dpgettext( + "static_pages", + "successful registration email body", + """ +Your account at %{instance_name} has been registered successfully.
+No further action is required to activate your account.
+ """, + 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() + ) + ) + |> html_body(html_body) + end + end + + @doc """ + Email used in digest email notifications + Includes Mentions and New Followers data + If there are no mentions (even when new followers exist), the function will return nil + """ + @spec digest_email(User.t()) :: Swoosh.Email.t() | nil + def digest_email(user) do + 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 - def password_reset_email(user, password_reset_token) when is_binary(password_reset_token) do - password_reset_url = - Router.Helpers.util_url( - Endpoint, - :show_password_reset, - password_reset_token - ) - - html_body = """ -Someone has requested password change for your account at #{instance_name()}.
-If it was you, visit the following link to proceed: reset password.
-If it was someone else, nothing to worry about: your data is secure and your password has not been changed.
- """ - - new() - |> to(recipient(user.email, user.name)) - |> from(sender()) - |> subject("Password reset") - |> html_body(html_body) + 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)) + end + end + end + + defp format_links(str) do + re = ~r/You requested a full backup of your Akkoma account. It's ready for download:
+ + """, + download_url: download_url + ) + else + admin = Pleroma.Repo.get(User, admin_user_id) + + Gettext.dpgettext( + "static_pages", + "account archive email body - admin requested", + """ +Admin @%{admin_nickname} requested a full backup of your Akkoma account. It's ready for download:
+ + """, + admin_nickname: admin.nickname, + download_url: download_url + ) + 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) + end end end