From efe67602c61647892ecac8faf395ca543e44967e Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Sun, 26 Apr 2015 14:55:18 +0000 Subject: [PATCH] Don't use a class variable for mail handler options. git-svn-id: http://svn.redmine.org/redmine/trunk@14228 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/models/mail_handler.rb | 60 +++++++++++++++++++++----------------- 1 file changed, 33 insertions(+), 27 deletions(-) diff --git a/app/models/mail_handler.rb b/app/models/mail_handler.rb index d4e57c79d..a0a52fe2b 100644 --- a/app/models/mail_handler.rb +++ b/app/models/mail_handler.rb @@ -22,28 +22,33 @@ class MailHandler < ActionMailer::Base class UnauthorizedAction < StandardError; end class MissingInformation < StandardError; end - attr_reader :email, :user + attr_reader :email, :user, :handler_options - def self.receive(email, options={}) - @@handler_options = options.deep_dup + def self.receive(raw_mail, options={}) + options = options.deep_dup - @@handler_options[:issue] ||= {} + options[:issue] ||= {} - if @@handler_options[:allow_override].is_a?(String) - @@handler_options[:allow_override] = @@handler_options[:allow_override].split(',').collect(&:strip) + if options[:allow_override].is_a?(String) + options[:allow_override] = options[:allow_override].split(',').collect(&:strip) end - @@handler_options[:allow_override] ||= [] + options[:allow_override] ||= [] # Project needs to be overridable if not specified - @@handler_options[:allow_override] << 'project' unless @@handler_options[:issue].has_key?(:project) + options[:allow_override] << 'project' unless options[:issue].has_key?(:project) # Status overridable by default - @@handler_options[:allow_override] << 'status' unless @@handler_options[:issue].has_key?(:status) + options[:allow_override] << 'status' unless options[:issue].has_key?(:status) - @@handler_options[:no_account_notice] = (@@handler_options[:no_account_notice].to_s == '1') - @@handler_options[:no_notification] = (@@handler_options[:no_notification].to_s == '1') - @@handler_options[:no_permission_check] = (@@handler_options[:no_permission_check].to_s == '1') + options[:no_account_notice] = (options[:no_account_notice].to_s == '1') + options[:no_notification] = (options[:no_notification].to_s == '1') + options[:no_permission_check] = (options[:no_permission_check].to_s == '1') - email.force_encoding('ASCII-8BIT') - super(email) + raw_mail.force_encoding('ASCII-8BIT') + + ActiveSupport::Notifications.instrument("receive.action_mailer") do |payload| + mail = Mail.new(raw_mail) + set_payload_for_mail(payload, mail) + new.receive(mail, options) + end end # Receives an email and rescues any exception @@ -79,8 +84,9 @@ class MailHandler < ActionMailer::Base # Processes incoming emails # Returns the created object (eg. an issue, a message) or false - def receive(email) + def receive(email, options={}) @email = email + @handler_options = options sender_email = email.from.to_a.first.to_s.strip # Ignore emails received from the application emission address to avoid hell cycles if sender_email.downcase == Setting.mail_from.to_s.strip.downcase @@ -111,7 +117,7 @@ class MailHandler < ActionMailer::Base end if @user.nil? # Email was submitted by an unknown user - case @@handler_options[:unknown_user] + case handler_options[:unknown_user] when 'accept' @user = User.anonymous when 'create' @@ -120,8 +126,8 @@ class MailHandler < ActionMailer::Base if logger logger.info "MailHandler: [#{@user.login}] account created" end - add_user_to_group(@@handler_options[:default_group]) - unless @@handler_options[:no_account_notice] + add_user_to_group(handler_options[:default_group]) + unless handler_options[:no_account_notice] Mailer.account_information(@user, @user.password).deliver end else @@ -186,7 +192,7 @@ class MailHandler < ActionMailer::Base def receive_issue project = target_project # check permission - unless @@handler_options[:no_permission_check] + unless handler_options[:no_permission_check] raise UnauthorizedAction unless user.allowed_to?(:add_issues, project) end @@ -213,7 +219,7 @@ class MailHandler < ActionMailer::Base issue = Issue.find_by_id(issue_id) return unless issue # check permission - unless @@handler_options[:no_permission_check] + unless handler_options[:no_permission_check] unless user.allowed_to?(:add_issue_notes, issue.project) || user.allowed_to?(:edit_issues, issue.project) raise UnauthorizedAction @@ -221,7 +227,7 @@ class MailHandler < ActionMailer::Base end # ignore CLI-supplied defaults for new issues - @@handler_options[:issue].clear + handler_options[:issue].clear journal = issue.init_journal(user) if from_journal && from_journal.private_notes? @@ -253,7 +259,7 @@ class MailHandler < ActionMailer::Base if message message = message.root - unless @@handler_options[:no_permission_check] + unless handler_options[:no_permission_check] raise UnauthorizedAction unless user.allowed_to?(:add_messages, message.project) end @@ -318,11 +324,11 @@ class MailHandler < ActionMailer::Base @keywords[attr] else @keywords[attr] = begin - if (options[:override] || @@handler_options[:allow_override].include?(attr.to_s)) && + if (options[:override] || handler_options[:allow_override].include?(attr.to_s)) && (v = extract_keyword!(cleaned_up_text_body, attr, options[:format])) v - elsif !@@handler_options[:issue][attr].blank? - @@handler_options[:issue][attr] + elsif !handler_options[:issue][attr].blank? + handler_options[:issue][attr] end end end @@ -359,7 +365,7 @@ class MailHandler < ActionMailer::Base target = Project.find_by_identifier(get_keyword(:project)) if target.nil? # Invalid project keyword, use the project specified as the default one - default_project = @@handler_options[:issue][:project] + default_project = handler_options[:issue][:project] if default_project.present? target = Project.find_by_identifier(default_project) end @@ -485,7 +491,7 @@ class MailHandler < ActionMailer::Base end if addr.present? user = self.class.new_user_from_attributes(addr, name) - if @@handler_options[:no_notification] + if handler_options[:no_notification] user.mail_notification = 'none' end if user.save -- 2.39.5