diff --git a/app/controllers/api/v1/reports_controller.rb b/app/controllers/api/v1/reports_controller.rb
index 71df76e922e..8e7070d0779 100644
--- a/app/controllers/api/v1/reports_controller.rb
+++ b/app/controllers/api/v1/reports_controller.rb
@@ -17,6 +17,9 @@ class Api::V1::ReportsController < Api::BaseController
status_ids: reported_status_ids,
comment: report_params[:comment]
)
+
+ User.admins.includes(:account).each { |u| AdminMailer.new_report(u.account, @report).deliver_later }
+
render :show
end
diff --git a/app/mailers/admin_mailer.rb b/app/mailers/admin_mailer.rb
new file mode 100644
index 00000000000..fc19a6d40bb
--- /dev/null
+++ b/app/mailers/admin_mailer.rb
@@ -0,0 +1,13 @@
+# frozen_string_literal: true
+
+class AdminMailer < ApplicationMailer
+ def new_report(recipient, report)
+ @report = report
+ @me = recipient
+ @instance = Rails.configuration.x.local_domain
+
+ locale_for_account(@me) do
+ mail to: @me.user_email, subject: I18n.t('admin_mailer.new_report.subject', instance: @instance, id: @report.id)
+ end
+ end
+end
diff --git a/app/mailers/application_mailer.rb b/app/mailers/application_mailer.rb
index e5dbfeeda91..2e730c19b04 100644
--- a/app/mailers/application_mailer.rb
+++ b/app/mailers/application_mailer.rb
@@ -4,4 +4,12 @@ class ApplicationMailer < ActionMailer::Base
default from: ENV.fetch('SMTP_FROM_ADDRESS') { 'notifications@localhost' }
layout 'mailer'
helper :instance
+
+ protected
+
+ def locale_for_account(account)
+ I18n.with_locale(account.user_locale || I18n.default_locale) do
+ yield
+ end
+ end
end
diff --git a/app/mailers/notification_mailer.rb b/app/mailers/notification_mailer.rb
index a944db137fe..12b92bf4515 100644
--- a/app/mailers/notification_mailer.rb
+++ b/app/mailers/notification_mailer.rb
@@ -67,12 +67,4 @@ class NotificationMailer < ApplicationMailer
)
end
end
-
- private
-
- def locale_for_account(account)
- I18n.with_locale(account.user_locale || I18n.default_locale) do
- yield
- end
- end
end
diff --git a/app/views/admin_mailer/new_report.text.erb b/app/views/admin_mailer/new_report.text.erb
new file mode 100644
index 00000000000..6fa744bc3d1
--- /dev/null
+++ b/app/views/admin_mailer/new_report.text.erb
@@ -0,0 +1,5 @@
+<%= display_name(@me) %>,
+
+<%= raw t('admin_mailer.new_report.body', target: @report.target_account.acct, reporter: @report.account.acct) %>
+
+<%= raw t('application_mailer.view')%> <%= admin_report_url(@report) %>
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 9daaf53ecdc..944c24c60c8 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -193,6 +193,10 @@ en:
title: PubSubHubbub
topic: Topic
title: Administration
+ admin_mailer:
+ new_report:
+ body: "%{reporter} has reported %{target}"
+ subject: New report for %{instance} (#%{id})
application_mailer:
settings: 'Change e-mail preferences: %{link}'
signature: Mastodon notifications from %{instance}
@@ -399,9 +403,7 @@ en:
manual_instructions: 'If you can''t scan the QR code and need to enter it manually, here is the plain-text secret:'
recovery_codes: Backup recovery codes
recovery_codes_regenerated: Recovery codes successfully regenerated
- recovery_instructions_html:
- If you ever lose access to your phone, you can use one of the recovery codes below to regain access to your account. Keep the recovery codes safe.
- For example, you may print them and store them with other important documents.
+ recovery_instructions_html: If you ever lose access to your phone, you can use one of the recovery codes below to regain access to your account. Keep the recovery codes safe. For example, you may print them and store them with other important documents.
setup: Set up
wrong_code: The entered code was invalid! Are server time and device time correct?
users:
diff --git a/spec/controllers/api/v1/reports_controller_spec.rb b/spec/controllers/api/v1/reports_controller_spec.rb
index 3df6cdfe746..471ea4e0bcd 100644
--- a/spec/controllers/api/v1/reports_controller_spec.rb
+++ b/spec/controllers/api/v1/reports_controller_spec.rb
@@ -21,12 +21,21 @@ RSpec.describe Api::V1::ReportsController, type: :controller do
end
describe 'POST #create' do
- it 'creates a report' do
- status = Fabricate(:status)
- post :create, params: { status_ids: [status.id], account_id: status.account.id, comment: 'reasons' }
+ let!(:status) { Fabricate(:status) }
+ let!(:admin) { Fabricate(:user, admin: true) }
+ before do
+ allow(AdminMailer).to receive(:new_report).and_return(double('email', deliver_later: nil))
+ post :create, params: { status_ids: [status.id], account_id: status.account.id, comment: 'reasons' }
+ end
+
+ it 'creates a report' do
expect(status.reload.account.targeted_reports).not_to be_empty
expect(response).to have_http_status(:success)
end
+
+ it 'sends e-mails to admins' do
+ expect(AdminMailer).to have_received(:new_report).with(admin.account, Report)
+ end
end
end