From aa0f0d4edd4205c2b1d7c4f5a885d57287f6379a Mon Sep 17 00:00:00 2001
From: Egor Kislitsyn <egor@kislitsyn.com>
Date: Wed, 22 Jan 2020 20:53:06 +0400
Subject: [PATCH] Disable NewUsersDigestEmail by default

---
 config/config.exs                             |  2 +
 config/test.exs                               |  2 +
 .../workers/new_users_digest_worker.ex        | 72 ++++++++++---------
 3 files changed, 41 insertions(+), 35 deletions(-)

diff --git a/config/config.exs b/config/config.exs
index 53ea76dd3..3f0222f0e 100644
--- a/config/config.exs
+++ b/config/config.exs
@@ -581,6 +581,8 @@ config :pleroma, Pleroma.Emails.UserEmail,
     text_muted_color: "#b9b9ba"
   }
 
+config :pleroma, Pleroma.Emails.NewUsersDigestEmail, enabled: false
+
 config :prometheus, Pleroma.Web.Endpoint.MetricsExporter, path: "/api/pleroma/app_metrics"
 
 config :pleroma, Pleroma.ScheduledActivity,
diff --git a/config/test.exs b/config/test.exs
index 5c66a36f1..9da0ae484 100644
--- a/config/test.exs
+++ b/config/test.exs
@@ -97,6 +97,8 @@ config :pleroma, Pleroma.ReverseProxy.Client, Pleroma.ReverseProxy.ClientMock
 
 config :pleroma, :modules, runtime_dir: "test/fixtures/modules"
 
+config :pleroma, Pleroma.Emails.NewUsersDigestEmail, enabled: true
+
 if File.exists?("./config/test.secret.exs") do
   import_config "test.secret.exs"
 else
diff --git a/lib/pleroma/workers/new_users_digest_worker.ex b/lib/pleroma/workers/new_users_digest_worker.ex
index 24cc6bdf3..b776b2c79 100644
--- a/lib/pleroma/workers/new_users_digest_worker.ex
+++ b/lib/pleroma/workers/new_users_digest_worker.ex
@@ -13,44 +13,46 @@ defmodule Pleroma.Workers.NewUsersDigestWorker do
 
   @impl Oban.Worker
   def perform(_args, _job) do
-    today = NaiveDateTime.utc_now() |> Timex.beginning_of_day()
+    if Pleroma.Config.get([Pleroma.Emails.NewUsersDigestEmail, :enabled]) do
+      today = NaiveDateTime.utc_now() |> Timex.beginning_of_day()
 
-    a_day_ago =
-      today
-      |> Timex.shift(days: -1)
-      |> Timex.beginning_of_day()
+      a_day_ago =
+        today
+        |> Timex.shift(days: -1)
+        |> Timex.beginning_of_day()
 
-    users_and_statuses =
-      %{
-        local: true,
-        order_by: :inserted_at
-      }
+      users_and_statuses =
+        %{
+          local: true,
+          order_by: :inserted_at
+        }
+        |> User.Query.build()
+        |> where([u], u.inserted_at >= ^a_day_ago and u.inserted_at < ^today)
+        |> Repo.all()
+        |> Enum.map(fn user ->
+          latest_status =
+            Activity
+            |> Activity.Queries.by_actor(user.ap_id)
+            |> Activity.Queries.by_type("Create")
+            |> Activity.with_preloaded_object()
+            |> order_by(desc: :inserted_at)
+            |> limit(1)
+            |> Repo.one()
+
+          total_statuses =
+            Activity
+            |> Activity.Queries.by_actor(user.ap_id)
+            |> Activity.Queries.by_type("Create")
+            |> Repo.aggregate(:count, :id)
+
+          {user, total_statuses, latest_status}
+        end)
+
+      %{is_admin: true}
       |> User.Query.build()
-      |> where([u], u.inserted_at >= ^a_day_ago and u.inserted_at < ^today)
       |> Repo.all()
-      |> Enum.map(fn user ->
-        latest_status =
-          Activity
-          |> Activity.Queries.by_actor(user.ap_id)
-          |> Activity.Queries.by_type("Create")
-          |> Activity.with_preloaded_object()
-          |> order_by(desc: :inserted_at)
-          |> limit(1)
-          |> Repo.one()
-
-        total_statuses =
-          Activity
-          |> Activity.Queries.by_actor(user.ap_id)
-          |> Activity.Queries.by_type("Create")
-          |> Repo.aggregate(:count, :id)
-
-        {user, total_statuses, latest_status}
-      end)
-
-    %{is_admin: true}
-    |> User.Query.build()
-    |> Repo.all()
-    |> Enum.map(&Pleroma.Emails.NewUsersDigestEmail.new_users(&1, users_and_statuses))
-    |> Enum.each(&Pleroma.Emails.Mailer.deliver/1)
+      |> Enum.map(&Pleroma.Emails.NewUsersDigestEmail.new_users(&1, users_and_statuses))
+      |> Enum.each(&Pleroma.Emails.Mailer.deliver/1)
+    end
   end
 end