@@ -29,7 +29,9 class MailHandler < ActionMailer::Base | |||||
29 |
|
29 | |||
30 | @@handler_options[:issue] ||= {} |
|
30 | @@handler_options[:issue] ||= {} | |
31 |
|
31 | |||
32 | @@handler_options[:allow_override] = @@handler_options[:allow_override].split(',').collect(&:strip) if @@handler_options[:allow_override].is_a?(String) |
|
32 | if @@handler_options[:allow_override].is_a?(String) | |
|
33 | @@handler_options[:allow_override] = @@handler_options[:allow_override].split(',').collect(&:strip) | |||
|
34 | end | |||
33 | @@handler_options[:allow_override] ||= [] |
|
35 | @@handler_options[:allow_override] ||= [] | |
34 | # Project needs to be overridable if not specified |
|
36 | # Project needs to be overridable if not specified | |
35 | @@handler_options[:allow_override] << 'project' unless @@handler_options[:issue].has_key?(:project) |
|
37 | @@handler_options[:allow_override] << 'project' unless @@handler_options[:issue].has_key?(:project) | |
@@ -47,12 +49,16 class MailHandler < ActionMailer::Base | |||||
47 | sender_email = email.from.to_a.first.to_s.strip |
|
49 | sender_email = email.from.to_a.first.to_s.strip | |
48 | # Ignore emails received from the application emission address to avoid hell cycles |
|
50 | # Ignore emails received from the application emission address to avoid hell cycles | |
49 | if sender_email.downcase == Setting.mail_from.to_s.strip.downcase |
|
51 | if sender_email.downcase == Setting.mail_from.to_s.strip.downcase | |
50 | logger.info "MailHandler: ignoring email from Redmine emission address [#{sender_email}]" if logger && logger.info |
|
52 | if logger && logger.info | |
|
53 | logger.info "MailHandler: ignoring email from Redmine emission address [#{sender_email}]" | |||
|
54 | end | |||
51 | return false |
|
55 | return false | |
52 | end |
|
56 | end | |
53 | @user = User.find_by_mail(sender_email) if sender_email.present? |
|
57 | @user = User.find_by_mail(sender_email) if sender_email.present? | |
54 | if @user && !@user.active? |
|
58 | if @user && !@user.active? | |
55 | logger.info "MailHandler: ignoring email from non-active user [#{@user.login}]" if logger && logger.info |
|
59 | if logger && logger.info | |
|
60 | logger.info "MailHandler: ignoring email from non-active user [#{@user.login}]" | |||
|
61 | end | |||
56 | return false |
|
62 | return false | |
57 | end |
|
63 | end | |
58 | if @user.nil? |
|
64 | if @user.nil? | |
@@ -63,15 +69,21 class MailHandler < ActionMailer::Base | |||||
63 | when 'create' |
|
69 | when 'create' | |
64 | @user = create_user_from_email |
|
70 | @user = create_user_from_email | |
65 | if @user |
|
71 | if @user | |
66 | logger.info "MailHandler: [#{@user.login}] account created" if logger && logger.info |
|
72 | if logger && logger.info | |
|
73 | logger.info "MailHandler: [#{@user.login}] account created" | |||
|
74 | end | |||
67 | Mailer.deliver_account_information(@user, @user.password) |
|
75 | Mailer.deliver_account_information(@user, @user.password) | |
68 | else |
|
76 | else | |
69 | logger.error "MailHandler: could not create account for [#{sender_email}]" if logger && logger.error |
|
77 | if logger && logger.error | |
|
78 | logger.error "MailHandler: could not create account for [#{sender_email}]" | |||
|
79 | end | |||
70 | return false |
|
80 | return false | |
71 | end |
|
81 | end | |
72 | else |
|
82 | else | |
73 | # Default behaviour, emails from unknown users are ignored |
|
83 | # Default behaviour, emails from unknown users are ignored | |
74 | logger.info "MailHandler: ignoring email from unknown user [#{sender_email}]" if logger && logger.info |
|
84 | if logger && logger.info | |
|
85 | logger.info "MailHandler: ignoring email from unknown user [#{sender_email}]" | |||
|
86 | end | |||
75 | return false |
|
87 | return false | |
76 | end |
|
88 | end | |
77 | end |
|
89 | end | |
@@ -149,7 +161,10 class MailHandler < ActionMailer::Base | |||||
149 | return unless issue |
|
161 | return unless issue | |
150 | # check permission |
|
162 | # check permission | |
151 | unless @@handler_options[:no_permission_check] |
|
163 | unless @@handler_options[:no_permission_check] | |
152 |
|
|
164 | unless user.allowed_to?(:add_issue_notes, issue.project) || | |
|
165 | user.allowed_to?(:edit_issues, issue.project) | |||
|
166 | raise UnauthorizedAction | |||
|
167 | end | |||
153 | end |
|
168 | end | |
154 |
|
169 | |||
155 | # ignore CLI-supplied defaults for new issues |
|
170 | # ignore CLI-supplied defaults for new issues | |
@@ -161,7 +176,9 class MailHandler < ActionMailer::Base | |||||
161 | journal.notes = cleaned_up_text_body |
|
176 | journal.notes = cleaned_up_text_body | |
162 | add_attachments(issue) |
|
177 | add_attachments(issue) | |
163 | issue.save! |
|
178 | issue.save! | |
164 | logger.info "MailHandler: issue ##{issue.id} updated by #{user}" if logger && logger.info |
|
179 | if logger && logger.info | |
|
180 | logger.info "MailHandler: issue ##{issue.id} updated by #{user}" | |||
|
181 | end | |||
165 | journal |
|
182 | journal | |
166 | end |
|
183 | end | |
167 |
|
184 | |||
@@ -192,7 +209,9 class MailHandler < ActionMailer::Base | |||||
192 | add_attachments(reply) |
|
209 | add_attachments(reply) | |
193 | reply |
|
210 | reply | |
194 | else |
|
211 | else | |
195 | logger.info "MailHandler: ignoring reply from [#{sender_email}] to a locked topic" if logger && logger.info |
|
212 | if logger && logger.info | |
|
213 | logger.info "MailHandler: ignoring reply from [#{sender_email}] to a locked topic" | |||
|
214 | end | |||
196 | end |
|
215 | end | |
197 | end |
|
216 | end | |
198 | end |
|
217 | end | |
@@ -241,8 +260,12 class MailHandler < ActionMailer::Base | |||||
241 | def extract_keyword!(text, attr, format=nil) |
|
260 | def extract_keyword!(text, attr, format=nil) | |
242 | keys = [attr.to_s.humanize] |
|
261 | keys = [attr.to_s.humanize] | |
243 | if attr.is_a?(Symbol) |
|
262 | if attr.is_a?(Symbol) | |
244 | keys << l("field_#{attr}", :default => '', :locale => user.language) if user && user.language.present? |
|
263 | if user && user.language.present? | |
245 |
keys << l("field_#{attr}", :default => '', :locale => |
|
264 | keys << l("field_#{attr}", :default => '', :locale => user.language) | |
|
265 | end | |||
|
266 | if Setting.default_language.present? | |||
|
267 | keys << l("field_#{attr}", :default => '', :locale => Setting.default_language) | |||
|
268 | end | |||
246 | end |
|
269 | end | |
247 | keys.reject! {|k| k.blank?} |
|
270 | keys.reject! {|k| k.blank?} | |
248 | keys.collect! {|k| Regexp.escape(k)} |
|
271 | keys.collect! {|k| Regexp.escape(k)} | |
@@ -388,10 +411,16 class MailHandler < ActionMailer::Base | |||||
388 | keyword = keyword.to_s.downcase |
|
411 | keyword = keyword.to_s.downcase | |
389 | assignable = issue.assignable_users |
|
412 | assignable = issue.assignable_users | |
390 | assignee = nil |
|
413 | assignee = nil | |
391 | assignee ||= assignable.detect {|a| a.mail.to_s.downcase == keyword || a.login.to_s.downcase == keyword} |
|
414 | assignee ||= assignable.detect {|a| | |
|
415 | a.mail.to_s.downcase == keyword || | |||
|
416 | a.login.to_s.downcase == keyword | |||
|
417 | } | |||
392 | if assignee.nil? && keyword.match(/ /) |
|
418 | if assignee.nil? && keyword.match(/ /) | |
393 | firstname, lastname = *(keyword.split) # "First Last Throwaway" |
|
419 | firstname, lastname = *(keyword.split) # "First Last Throwaway" | |
394 | assignee ||= assignable.detect {|a| a.is_a?(User) && a.firstname.to_s.downcase == firstname && a.lastname.to_s.downcase == lastname} |
|
420 | assignee ||= assignable.detect {|a| | |
|
421 | a.is_a?(User) && a.firstname.to_s.downcase == firstname && | |||
|
422 | a.lastname.to_s.downcase == lastname | |||
|
423 | } | |||
395 | end |
|
424 | end | |
396 | if assignee.nil? |
|
425 | if assignee.nil? | |
397 | assignee ||= assignable.detect {|a| a.is_a?(Group) && a.name.downcase == keyword} |
|
426 | assignee ||= assignable.detect {|a| a.is_a?(Group) && a.name.downcase == keyword} |
General Comments 0
You need to be logged in to leave comments.
Login now