Project

General

Profile

Feature #21421 » 0002-Add-Mailer-security_notification.patch

Jan from Planio www.plan.io, 2015-12-11 12:33

View differences:

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'
(4-4/9)