Feature #21421 » 0002-Add-Mailer-security_notification.patch
| app/models/mailer.rb | ||
|---|---|---|
| 318 | 318 |
:subject => l(:mail_subject_register, Setting.app_title) |
| 319 | 319 |
end |
| 320 | 320 | |
| 321 |
def security_notification(recipients, options={})
|
|
| 322 |
redmine_headers 'Sender' => User.current.login |
|
| 323 |
@user = Array(recipients).detect{|r| r.is_a? User }
|
|
| 324 |
set_language_if_valid(@user.try :language) |
|
| 325 |
@message = l(options[:message], |
|
| 326 |
field: (options[:field] && l(options[:field])), |
|
| 327 |
value: options[:value] |
|
| 328 |
) |
|
| 329 |
@title = options[:title] && l(options[:title]) |
|
| 330 |
@url = options[:url] && (options[:url].is_a?(Hash) ? url_for(options[:url]) : options[:url]) |
|
| 331 |
mail :to => recipients, |
|
| 332 |
:subject => l(:mail_subject_security_notification) |
|
| 333 |
end |
|
| 334 | ||
| 321 | 335 |
def test_email(user) |
| 322 | 336 |
set_language_if_valid(user.language) |
| 323 | 337 |
@url = url_for(:controller => 'welcome') |
| app/views/mailer/security_notification.html.erb | ||
|---|---|---|
| 1 |
<p><%= @message %><br /> |
|
| 2 |
<% if @url && @title -%> |
|
| 3 |
<%= link_to @title, @url -%> |
|
| 4 |
<% elsif @url -%> |
|
| 5 |
<%= link_to @url -%> |
|
| 6 |
<% elsif @title -%> |
|
| 7 |
<%= content_tag :h1, @title -%> |
|
| 8 |
<% end %></p> |
|
| 9 | ||
| 10 |
<p><%= l(:field_user) %>: <strong><%= User.current.login %></strong><br/> |
|
| 11 |
<%= l(:field_remote_ip) %>: <strong><%= User.current.remote_ip %></strong><br/> |
|
| 12 |
<%= l(:label_date) %>: <strong><%= format_time Time.now, true, @user %></strong></p> |
|
| 13 | ||
| app/views/mailer/security_notification.text.erb | ||
|---|---|---|
| 1 |
<%= @message %> |
|
| 2 | ||
| 3 |
<%= @url || @title %> |
|
| 4 | ||
| 5 |
<%= l(:field_user) %>: <%= User.current.login %> |
|
| 6 |
<%= l(:field_remote_ip) %>: <%= User.current.remote_ip %> |
|
| 7 |
<%= l(:label_date) %>: <%= format_time Time.now, true, @user %> |
|
| 8 | ||
| config/locales/de.yml | ||
|---|---|---|
| 848 | 848 |
mail_subject_reminder: "%{count} Tickets müssen in den nächsten %{days} Tagen abgegeben werden"
|
| 849 | 849 |
mail_subject_wiki_content_added: "Wiki-Seite '%{id}' hinzugefügt"
|
| 850 | 850 |
mail_subject_wiki_content_updated: "Wiki-Seite '%{id}' erfolgreich aktualisiert"
|
| 851 |
mail_subject_security_notification: "Sicherheitshinweis" |
|
| 852 |
mail_body_security_notification_change: "%{field} wurde geändert."
|
|
| 853 |
mail_body_security_notification_change_to: "%{field} wurde geändert zu %{value}."
|
|
| 854 |
mail_body_security_notification_add: "%{field} %{value} wurde hinzugefügt."
|
|
| 855 |
mail_body_security_notification_remove: "%{field} %{value} wurde entfernt."
|
|
| 851 | 856 | |
| 852 | 857 |
notice_account_activated: Ihr Konto ist aktiviert. Sie können sich jetzt anmelden. |
| 853 | 858 |
notice_account_deleted: Ihr Benutzerkonto wurde unwiderruflich gelöscht. |
| config/locales/en.yml | ||
|---|---|---|
| 227 | 227 |
mail_body_wiki_content_added: "The '%{id}' wiki page has been added by %{author}."
|
| 228 | 228 |
mail_subject_wiki_content_updated: "'%{id}' wiki page has been updated"
|
| 229 | 229 |
mail_body_wiki_content_updated: "The '%{id}' wiki page has been updated by %{author}."
|
| 230 |
mail_subject_security_notification: "Security notification" |
|
| 231 |
mail_body_security_notification_change: "%{field} was changed."
|
|
| 232 |
mail_body_security_notification_change_to: "%{field} was changed to %{value}."
|
|
| 233 |
mail_body_security_notification_add: "%{field} %{value} was added."
|
|
| 234 |
mail_body_security_notification_remove: "%{field} %{value} was removed."
|
|
| 230 | 235 | |
| 231 | 236 |
field_name: Name |
| 232 | 237 |
field_description: Description |
| test/unit/mailer_test.rb | ||
|---|---|---|
| 666 | 666 |
end |
| 667 | 667 |
end |
| 668 | 668 | |
| 669 |
def test_security_notification |
|
| 670 |
set_language_if_valid User.find(1).language |
|
| 671 |
with_settings :emails_footer => "footer without link" do |
|
| 672 |
User.current.remote_ip = '192.168.1.1' |
|
| 673 |
assert Mailer.security_notification(User.find(1), message: :notice_account_password_updated).deliver |
|
| 674 |
mail = last_email |
|
| 675 |
assert_not_nil mail |
|
| 676 |
assert_mail_body_match '192.168.1.1', mail |
|
| 677 |
assert_mail_body_match I18n.t(:notice_account_password_updated), mail |
|
| 678 |
assert_select_email do |
|
| 679 |
assert_select "h1", false |
|
| 680 |
assert_select "a", false |
|
| 681 |
end |
|
| 682 |
end |
|
| 683 |
end |
|
| 684 | ||
| 685 |
def test_security_notification_should_include_title |
|
| 686 |
set_language_if_valid User.find(2).language |
|
| 687 |
with_settings :emails_footer => "footer without link" do |
|
| 688 |
assert Mailer.security_notification(User.find(2), |
|
| 689 |
message: :notice_account_password_updated, |
|
| 690 |
title: :label_my_account |
|
| 691 |
).deliver |
|
| 692 |
assert_select_email do |
|
| 693 |
assert_select "a", false |
|
| 694 |
assert_select "h1", :text => I18n.t(:label_my_account) |
|
| 695 |
end |
|
| 696 |
end |
|
| 697 |
end |
|
| 698 | ||
| 699 |
def test_security_notification_should_include_link |
|
| 700 |
set_language_if_valid User.find(3).language |
|
| 701 |
with_settings :emails_footer => "footer without link" do |
|
| 702 |
assert Mailer.security_notification(User.find(3), |
|
| 703 |
message: :notice_account_password_updated, |
|
| 704 |
title: :label_my_account, |
|
| 705 |
url: {controller: 'my', action: 'account'}
|
|
| 706 |
).deliver |
|
| 707 |
assert_select_email do |
|
| 708 |
assert_select "h1", false |
|
| 709 |
assert_select 'a[href=?]', 'http://mydomain.foo/my/account', :text => I18n.t(:label_my_account) |
|
| 710 |
end |
|
| 711 |
end |
|
| 712 |
end |
|
| 713 | ||
| 669 | 714 |
def test_mailer_should_not_change_locale |
| 670 | 715 |
# Set current language to italian |
| 671 | 716 |
set_language_if_valid 'it' |