Fix #1624 - Send e-mail notifications to admins about new reports (#3949)

This commit is contained in:
Eugen Rochko 2017-06-27 00:04:00 +02:00 committed by GitHub
parent a91d968cab
commit 42b8220632
7 changed files with 46 additions and 14 deletions

View file

@ -17,6 +17,9 @@ class Api::V1::ReportsController < Api::BaseController
status_ids: reported_status_ids, status_ids: reported_status_ids,
comment: report_params[:comment] comment: report_params[:comment]
) )
User.admins.includes(:account).each { |u| AdminMailer.new_report(u.account, @report).deliver_later }
render :show render :show
end end

View file

@ -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

View file

@ -4,4 +4,12 @@ class ApplicationMailer < ActionMailer::Base
default from: ENV.fetch('SMTP_FROM_ADDRESS') { 'notifications@localhost' } default from: ENV.fetch('SMTP_FROM_ADDRESS') { 'notifications@localhost' }
layout 'mailer' layout 'mailer'
helper :instance helper :instance
protected
def locale_for_account(account)
I18n.with_locale(account.user_locale || I18n.default_locale) do
yield
end
end
end end

View file

@ -67,12 +67,4 @@ class NotificationMailer < ApplicationMailer
) )
end end
end end
private
def locale_for_account(account)
I18n.with_locale(account.user_locale || I18n.default_locale) do
yield
end
end
end end

View file

@ -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) %>

View file

@ -193,6 +193,10 @@ en:
title: PubSubHubbub title: PubSubHubbub
topic: Topic topic: Topic
title: Administration title: Administration
admin_mailer:
new_report:
body: "%{reporter} has reported %{target}"
subject: New report for %{instance} (#%{id})
application_mailer: application_mailer:
settings: 'Change e-mail preferences: %{link}' settings: 'Change e-mail preferences: %{link}'
signature: Mastodon notifications from %{instance} 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:' 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: Backup recovery codes
recovery_codes_regenerated: Recovery codes successfully regenerated recovery_codes_regenerated: Recovery codes successfully regenerated
recovery_instructions_html: 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. <strong>Keep the recovery codes safe</strong>. For example, you may print them and store them with other important documents.
If you ever lose access to your phone, you can use one of the recovery codes below to regain access to your account. <strong>Keep the recovery codes safe</strong>.
For example, you may print them and store them with other important documents.
setup: Set up setup: Set up
wrong_code: The entered code was invalid! Are server time and device time correct? wrong_code: The entered code was invalid! Are server time and device time correct?
users: users:

View file

@ -21,12 +21,21 @@ RSpec.describe Api::V1::ReportsController, type: :controller do
end end
describe 'POST #create' do describe 'POST #create' do
it 'creates a report' do let!(:status) { Fabricate(:status) }
status = Fabricate(:status) let!(:admin) { Fabricate(:user, admin: true) }
post :create, params: { status_ids: [status.id], account_id: status.account.id, comment: 'reasons' }
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(status.reload.account.targeted_reports).not_to be_empty
expect(response).to have_http_status(:success) expect(response).to have_http_status(:success)
end end
it 'sends e-mails to admins' do
expect(AdminMailer).to have_received(:new_report).with(admin.account, Report)
end
end end
end end