Feature #31154 ยป feature-31154.patch
app/models/email_address.rb | ||
---|---|---|
20 | 20 |
class EmailAddress < ActiveRecord::Base |
21 | 21 |
include Redmine::SafeAttributes |
22 | 22 | |
23 |
EMAIL_REGEXP = /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i |
|
24 | ||
23 | 25 |
belongs_to :user |
24 | 26 | |
25 | 27 |
after_update :destroy_tokens |
... | ... | |
30 | 32 |
after_destroy_commit :deliver_security_notification_destroy |
31 | 33 | |
32 | 34 |
validates_presence_of :address |
33 |
validates_format_of :address, :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i, :allow_blank => true
|
|
35 |
validates_format_of :address, :with => EMAIL_REGEXP, :allow_blank => true
|
|
34 | 36 |
validates_length_of :address, :maximum => User::MAIL_LENGTH_LIMIT, :allow_nil => true |
35 | 37 |
validates_uniqueness_of :address, :case_sensitive => false, |
36 | 38 |
:if => Proc.new {|email| email.address_changed? && email.address.present?} |
app/models/setting.rb | ||
---|---|---|
166 | 166 |
end |
167 | 167 |
end |
168 | 168 | |
169 |
if settings.key?(:mail_from) |
|
170 |
begin |
|
171 |
mail_from = Mail::Address.new(settings[:mail_from]) |
|
172 |
raise unless mail_from.address =~ EmailAddress::EMAIL_REGEXP |
|
173 |
rescue |
|
174 |
messages << [:mail_from, l('activerecord.errors.messages.invalid')] |
|
175 |
end |
|
176 |
end |
|
169 | 177 |
messages |
170 | 178 |
end |
171 | 179 |
test/unit/setting_test.rb | ||
---|---|---|
132 | 132 |
Setting.where(:name => 'commit_update_keywords').delete_all |
133 | 133 |
Setting.clear_cache |
134 | 134 |
end |
135 | ||
136 |
def test_mail_from_format_should_be_validated |
|
137 |
with_settings :default_language => 'en' do |
|
138 |
['[Redmine app] <redmine@example.net>', 'redmine'].each do |invalid_mail_from| |
|
139 |
errors = Setting.set_all_from_params({:mail_from => invalid_mail_from}) |
|
140 |
assert_includes errors, [:mail_from, 'is invalid'] |
|
141 |
end |
|
142 | ||
143 |
['Redmine app <redmine@example.net>', 'redmine@example.net', '<redmine@example.net>'].each do |valid_mail_from| |
|
144 |
errors = Setting.set_all_from_params({:mail_from => valid_mail_from}) |
|
145 |
assert_nil errors |
|
146 |
end |
|
147 |
end |
|
148 |
end |
|
135 | 149 |
end |