Project

General

Profile

Patch #19242 ยป patch-rdm-mailhandler-options.patch

Stephane Lapie, 2015-03-03 03:56

View differences:

extra/mail_handler/rdm-mailhandler.rb 2015-03-03 11:38:39.904795266 +0900
45 45
  VERSION = '0.2.3'
46 46

  
47 47
  attr_accessor :verbose, :issue_attributes, :allow_override, :unknown_user, :default_group, :no_permission_check,
48
    :override_sender, :post_user, :email_header, :email_footer,
48 49
    :url, :key, :no_check_certificate, :certificate_bundle, :no_account_notice, :no_notification
49 50

  
50 51
  def initialize
......
76 77
      opts.on("--unknown-user ACTION",        "how to handle emails from an unknown user",
77 78
                                              "ACTION can be one of the following values:",
78 79
                                              "* ignore: email is ignored (default)",
79
                                              "* accept: accept as anonymous user",
80
                                              "* accept: accept as anonymous user or posting user",
80 81
                                              "* create: create a user account") {|v| self.unknown_user = v}
81 82
      opts.on("--default-group GROUP",        "add created user to GROUP (none by default)",
82 83
                                              "GROUP can be a comma separated list of groups") { |v| self.default_group = v}
......
85 86
      opts.on("--no-notification",            "disable email notifications for the created",
86 87
                                              "user") { |v| self.no_notification = '1'}
87 88
      opts.separator("")
89
      opts.separator("User override options:")
90
      opts.on("--override-sender YES/NO",     "used in conjunction with '--post-user ADDRESS'",
91
                                              "and will override the original email sender if set to 'yes'.") { |v| self.override_sender = v}
92
      opts.on("--post-user SENDER",           "can do one of the following:",
93
                                              "* with '--unknown-user accept', accept emails as SENDER instead of anonymous",
94
                                              "* with '--override-sender yes', submit all emails as SENDER") { |v| self.post_user = v}
95
      opts.separator("")
88 96
      opts.separator("Issue attributes control options:")
89 97
      opts.on("-p", "--project PROJECT",      "identifier of the target project") {|v| self.issue_attributes['project'] = v}
90 98
      opts.on("-s", "--status STATUS",        "name of the target status") {|v| self.issue_attributes['status'] = v}
......
94 102
      opts.on("-o", "--allow-override ATTRS", "allow email content to override attributes",
95 103
                                              "specified by previous options",
96 104
                                              "ATTRS is a comma separated list of attributes") {|v| self.allow_override = v}
105
      opts.on("--email-header TEXT",          "text added before the e-mail body when posting it") { |v| self.email_header = v}
106
      opts.on("--email-footer TEXT",          "text added after the e-mail body when posting it") { |v| self.email_footer = v}
97 107
      opts.separator("")
98 108
      opts.separator("Examples:")
99 109
      opts.separator("No project specified, emails MUST contain the 'Project' keyword:")
......
106 116
      opts.separator("    --tracker bug \\")
107 117
      opts.separator("    --allow-override tracker,priority")
108 118

  
109
      opts.summary_width = 27
119
      opts.summary_width = 29
110 120
    end
111 121
    optparse.parse!
112 122

  
......
127 137
                           'default_group' => default_group,
128 138
                           'no_account_notice' => no_account_notice,
129 139
                           'no_notification' => no_notification,
130
                           'no_permission_check' => no_permission_check}
140
                           'no_permission_check' => no_permission_check,
141
                           'override_sender' => override_sender,
142
                           'post_user' => post_user,
143
                           'email_header' => email_header,
144
                           'email_footer' => email_footer,
145
    }
131 146
    issue_attributes.each { |attr, value| data["issue[#{attr}]"] = value }
132 147

  
133 148
    debug "Posting to #{uri}..."
134
-- app/models/mail_handler.rb	2014-11-06 19:25:57.014951624 +0900
149
++ app/models/mail_handler.rb	2015-03-03 11:30:37.951652211 +0900
......
94 94
        end
95 95
      end
96 96
    end
97
    @user = User.find_by_mail(sender_email) if sender_email.present?
97
    if @@handler_options[:override_sender].to_s.strip.downcase == "yes"
98
      @user = User.find_by_mail(@@handler_options[:post_user]) if @@handler_options[:post_user] && !@@handler_options[:post_user].empty?
99
    else
100
      @user = User.find_by_mail(sender_email) if sender_email.present?
101
    end
98 102
    if @user && !@user.active?
99 103
      if logger
100 104
        logger.info  "MailHandler: ignoring email from non-active user [#{@user.login}]"
......
106 110
      case @@handler_options[:unknown_user]
107 111
      when 'accept'
108 112
        @user = User.anonymous
113
        if @@handler_options[:post_user]
114
          post_user = User.find_by_mail(@@handler_options[:post_user])
115
          if post_user
116
            if post_user.active?
117
              logger.info "MailHandler: e-mail from unknown users are to be processed as user [#{post_user}]"
118
              @user = post_user
119
            else
120
              logger.info "MailHandler: user [#{post_user}] was inactive, falling back to anonymous"
121
            end
122
          end
123
        end
109 124
      when 'create'
110 125
        @user = create_user_from_email
111 126
        if @user
......
428 443
  end
429 444

  
430 445
  def cleaned_up_text_body
431
    cleanup_body(plain_text_body)
446
    header = ""
447
    footer = ""
448
    header = @@handler_options[:email_header] + "\n" if @@handler_options[:email_header]
449
    footer = @@handler_options[:email_footer] + "\n" if @@handler_options[:email_footer]
450
    header + cleanup_body(plain_text_body) + footer
432 451
  end
433 452

  
434 453
  def cleaned_up_subject
    (1-1/1)