summaryrefslogtreecommitdiff
path: root/lib/pleroma/emails/admin_email.ex
blob: 5fe74e2f7ce4ec5c4969e2a64144269ce26ceb72 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# Pleroma: A lightweight social networking server
# Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only

defmodule Pleroma.Emails.AdminEmail do
  @moduledoc "Admin emails"

  import Swoosh.Email

  alias Pleroma.Config
  alias Pleroma.HTML
  alias Pleroma.Web.Router.Helpers

  defp instance_config, do: Config.get(:instance)
  defp instance_name, do: instance_config()[:name]

  defp instance_notify_email do
    Keyword.get(instance_config(), :notify_email, instance_config()[:email])
  end

  def test_email(mail_to \\ nil) do
    html_body = """
    <h3>Instance Test Email</h3>
    <p>A test email was requested. Hello. :)</p>
    """

    new()
    |> to(mail_to || Config.get([:instance, :email]))
    |> from({instance_name(), instance_notify_email()})
    |> subject("Instance Test Email")
    |> html_body(html_body)
  end

  def report(to, reporter, account, statuses, comment) do
    comment_html =
      if comment do
        "<p>Comment: #{comment}"
      else
        ""
      end

    statuses_html =
      if is_list(statuses) && length(statuses) > 0 do
        statuses_list_html =
          statuses
          |> Enum.map(fn
            %{id: id} ->
              status_url = Helpers.o_status_url(Pleroma.Web.Endpoint, :notice, id)
              "<li><a href=\"#{status_url}\">#{status_url}</li>"

            %{"id" => id} when is_binary(id) ->
              "<li><a href=\"#{id}\">#{id}</li>"

            id when is_binary(id) ->
              "<li><a href=\"#{id}\">#{id}</li>"
          end)
          |> Enum.join("\n")

        """
        <p> Statuses:
          <ul>
            #{statuses_list_html}
          </ul>
        </p>
        """
      else
        ""
      end

    html_body = """
    <p>Reported by: <a href="#{reporter.ap_id}">#{reporter.nickname}</a></p>
    <p>Reported Account: <a href="#{account.ap_id}">#{account.nickname}</a></p>
    #{comment_html}
    #{statuses_html}
    <p>
    <a href="#{Pleroma.Web.base_url()}/pleroma/admin/#/reports/index">View Reports in AdminFE</a>
    """

    new()
    |> to({to.name, to.email})
    |> from({instance_name(), instance_notify_email()})
    |> subject("#{instance_name()} Report")
    |> html_body(html_body)
  end

  def new_unapproved_registration(to, account) do
    html_body = """
    <p>New account for review: <a href="#{account.ap_id}">@#{account.nickname}</a></p>
    <blockquote>#{HTML.strip_tags(account.registration_reason)}</blockquote>
    <a href="#{Pleroma.Web.base_url()}/pleroma/admin/#/users/#{account.id}/">Visit AdminFE</a>
    """

    new()
    |> to({to.name, to.email})
    |> from({instance_name(), instance_notify_email()})
    |> subject("New account up for review on #{instance_name()} (@#{account.nickname})")
    |> html_body(html_body)
  end
end