##// END OF EJS Templates
fix source indents of app/views/repositories/revisions.html.erb...
fix source indents of app/views/repositories/revisions.html.erb git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9291 e93f8b46-1217-0410-a6f0-8f06a7374b81

File last commit:

r7834:d3a25649649a
r9157:0098c7b12883
Show More
rdm-mailhandler.rb
187 lines | 6.7 KiB | text/x-ruby | RubyLexer
Jean-Philippe Lang
Changes ruby bang path to #!/usr/bin/env ruby (#1876)....
r2015 #!/usr/bin/env ruby
Jean-Philippe Lang
Adds a simple API and a standalone script that can be used to forward emails from a local or remote email server to Redmine (#1110)....
r1570
Jean-Philippe Lang
Use RDoc.usage...
r1865 # == Synopsis
#
Jean-Philippe Lang
Adds a simple API and a standalone script that can be used to forward emails from a local or remote email server to Redmine (#1110)....
r1570 # Reads an email from standard input and forward it to a Redmine server
Jean-Philippe Lang
Use RDoc.usage...
r1865 # through a HTTP request.
#
# == Usage
#
# rdm-mailhandler [options] --url=<Redmine URL> --key=<API key>
#
# == Arguments
#
# -u, --url URL of the Redmine server
# -k, --key Redmine API key
#
# General options:
Jean-Philippe Lang
Ability to accept incoming emails from unknown users (#2230, #3003)....
r2689 # --unknown-user=ACTION how to handle emails from an unknown user
# ACTION can be one of the following values:
# ignore: email is ignored (default)
# accept: accept as anonymous user
# create: create a user account
Jean-Philippe Lang
Adds a 'no_permission_check' option to the MailHandler....
r3081 # --no-permission-check disable permission checking when receiving
# the email
Jean-Philippe Lang
Adds an option to rdm-mailhandler for reading the API key from a file (#4976)....
r7834 # --key-file=PATH path to a file that contains the Redmine
# API key (use this option instead of --key
# if you don't the key to appear in the
# command line)
Jean-Philippe Lang
Adds an option to rdm-mailhandler to disable server certificate verification (#9496)....
r7833 # --no-check-certificate do not check server certificate
Jean-Philippe Lang
Use RDoc.usage...
r1865 # -h, --help show this help
# -v, --verbose show extra information
# -V, --version show version information and exit
#
# Issue attributes control options:
# -p, --project=PROJECT identifier of the target project
Jean-Philippe Lang
Adds --status option to rdm-mailhandler....
r2074 # -s, --status=STATUS name of the target status
Jean-Philippe Lang
Use RDoc.usage...
r1865 # -t, --tracker=TRACKER name of the target tracker
# --category=CATEGORY name of the target category
# --priority=PRIORITY name of the target priority
# -o, --allow-override=ATTRS allow email content to override attributes
# specified by previous options
# ATTRS is a comma separated list of attributes
#
# == Examples
# No project specified. Emails MUST contain the 'Project' keyword:
#
# rdm-mailhandler --url http://redmine.domain.foo --key secret
#
# Fixed project and default tracker specified, but emails can override
# both tracker and priority attributes using keywords:
#
# rdm-mailhandler --url https://domain.foo/redmine --key secret \\
# --project foo \\
# --tracker bug \\
# --allow-override tracker,priority
Jean-Philippe Lang
Adds a simple API and a standalone script that can be used to forward emails from a local or remote email server to Redmine (#1110)....
r1570
require 'net/http'
require 'net/https'
require 'uri'
require 'getoptlong'
Jean-Philippe Lang
Use RDoc.usage...
r1865 require 'rdoc/usage'
Jean-Philippe Lang
Adds a simple API and a standalone script that can be used to forward emails from a local or remote email server to Redmine (#1110)....
r1570
Jean-Philippe Lang
Fixes rdm-mailhandler SSL support (#1724)....
r1714 module Net
class HTTPS < HTTP
Jean-Philippe Lang
Adds an option to rdm-mailhandler to disable server certificate verification (#9496)....
r7833 def self.post_form(url, params, headers, options={})
Jean-Philippe Lang
Fixes rdm-mailhandler SSL support (#1724)....
r1714 request = Post.new(url.path)
request.form_data = params
request.basic_auth url.user, url.password if url.user
Jean-Philippe Lang
Adds a User-Agent header to Redmine mailhandler requests (#7318)....
r4605 request.initialize_http_header(headers)
Jean-Philippe Lang
Fixes rdm-mailhandler SSL support (#1724)....
r1714 http = new(url.host, url.port)
http.use_ssl = (url.scheme == 'https')
Jean-Philippe Lang
Adds an option to rdm-mailhandler to disable server certificate verification (#9496)....
r7833 if options[:no_check_certificate]
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
end
Jean-Philippe Lang
Fixes rdm-mailhandler SSL support (#1724)....
r1714 http.start {|h| h.request(request) }
end
end
end
Jean-Philippe Lang
Adds a simple API and a standalone script that can be used to forward emails from a local or remote email server to Redmine (#1110)....
r1570 class RedmineMailHandler
VERSION = '0.1'
Jean-Philippe Lang
Adds an option to rdm-mailhandler to disable server certificate verification (#9496)....
r7833 attr_accessor :verbose, :issue_attributes, :allow_override, :unknown_user, :no_permission_check, :url, :key, :no_check_certificate
Jean-Philippe Lang
Adds a simple API and a standalone script that can be used to forward emails from a local or remote email server to Redmine (#1110)....
r1570
def initialize
Jean-Philippe Lang
Mail handler: more control over issue attributes (#1110)....
r1629 self.issue_attributes = {}
Jean-Philippe Lang
Adds a simple API and a standalone script that can be used to forward emails from a local or remote email server to Redmine (#1110)....
r1570 opts = GetoptLong.new(
Jean-Philippe Lang
Use RDoc.usage...
r1865 [ '--help', '-h', GetoptLong::NO_ARGUMENT ],
[ '--version', '-V', GetoptLong::NO_ARGUMENT ],
[ '--verbose', '-v', GetoptLong::NO_ARGUMENT ],
[ '--url', '-u', GetoptLong::REQUIRED_ARGUMENT ],
[ '--key', '-k', GetoptLong::REQUIRED_ARGUMENT],
Jean-Philippe Lang
Adds an option to rdm-mailhandler for reading the API key from a file (#4976)....
r7834 [ '--key-file', GetoptLong::REQUIRED_ARGUMENT],
Jean-Philippe Lang
Use RDoc.usage...
r1865 [ '--project', '-p', GetoptLong::REQUIRED_ARGUMENT ],
Jean-Philippe Lang
Adds --status option to rdm-mailhandler....
r2074 [ '--status', '-s', GetoptLong::REQUIRED_ARGUMENT ],
Jean-Philippe Lang
Use RDoc.usage...
r1865 [ '--tracker', '-t', GetoptLong::REQUIRED_ARGUMENT],
[ '--category', GetoptLong::REQUIRED_ARGUMENT],
[ '--priority', GetoptLong::REQUIRED_ARGUMENT],
Jean-Philippe Lang
Ability to accept incoming emails from unknown users (#2230, #3003)....
r2689 [ '--allow-override', '-o', GetoptLong::REQUIRED_ARGUMENT],
Jean-Philippe Lang
Adds a 'no_permission_check' option to the MailHandler....
r3081 [ '--unknown-user', GetoptLong::REQUIRED_ARGUMENT],
Jean-Philippe Lang
Adds an option to rdm-mailhandler to disable server certificate verification (#9496)....
r7833 [ '--no-permission-check', GetoptLong::NO_ARGUMENT],
[ '--no-check-certificate', GetoptLong::NO_ARGUMENT]
Jean-Philippe Lang
Adds a simple API and a standalone script that can be used to forward emails from a local or remote email server to Redmine (#1110)....
r1570 )
opts.each do |opt, arg|
case opt
when '--url'
self.url = arg.dup
when '--key'
self.key = arg.dup
Jean-Philippe Lang
Adds an option to rdm-mailhandler for reading the API key from a file (#4976)....
r7834 when '--key-file'
begin
self.key = File.read(arg).strip
rescue Exception => e
$stderr.puts "Unable to read the key from #{arg}: #{e.message}"
exit 1
end
Jean-Philippe Lang
Adds a simple API and a standalone script that can be used to forward emails from a local or remote email server to Redmine (#1110)....
r1570 when '--help'
usage
when '--verbose'
self.verbose = true
when '--version'
puts VERSION; exit
Jean-Philippe Lang
Adds --status option to rdm-mailhandler....
r2074 when '--project', '--status', '--tracker', '--category', '--priority'
Jean-Philippe Lang
Mail handler: more control over issue attributes (#1110)....
r1629 self.issue_attributes[opt.gsub(%r{^\-\-}, '')] = arg.dup
when '--allow-override'
self.allow_override = arg.dup
Jean-Philippe Lang
Ability to accept incoming emails from unknown users (#2230, #3003)....
r2689 when '--unknown-user'
self.unknown_user = arg.dup
Jean-Philippe Lang
Adds a 'no_permission_check' option to the MailHandler....
r3081 when '--no-permission-check'
self.no_permission_check = '1'
Jean-Philippe Lang
Adds an option to rdm-mailhandler to disable server certificate verification (#9496)....
r7833 when '--no-check-certificate'
self.no_check_certificate = true
Jean-Philippe Lang
Adds a simple API and a standalone script that can be used to forward emails from a local or remote email server to Redmine (#1110)....
r1570 end
end
Jean-Philippe Lang
Use RDoc.usage...
r1865 RDoc.usage if url.nil?
Jean-Philippe Lang
Adds a simple API and a standalone script that can be used to forward emails from a local or remote email server to Redmine (#1110)....
r1570 end
def submit(email)
uri = url.gsub(%r{/*$}, '') + '/mail_handler'
Jean-Philippe Lang
Mail handler: more control over issue attributes (#1110)....
r1629
Jean-Philippe Lang
Adds a User-Agent header to Redmine mailhandler requests (#7318)....
r4605 headers = { 'User-Agent' => "Redmine mail handler/#{VERSION}" }
Jean-Philippe Lang
Ability to accept incoming emails from unknown users (#2230, #3003)....
r2689 data = { 'key' => key, 'email' => email,
'allow_override' => allow_override,
Jean-Philippe Lang
Adds a 'no_permission_check' option to the MailHandler....
r3081 'unknown_user' => unknown_user,
'no_permission_check' => no_permission_check}
Jean-Philippe Lang
Mail handler: more control over issue attributes (#1110)....
r1629 issue_attributes.each { |attr, value| data["issue[#{attr}]"] = value }
Jean-Philippe Lang
Adds a simple API and a standalone script that can be used to forward emails from a local or remote email server to Redmine (#1110)....
r1570 debug "Posting to #{uri}..."
Jean-Philippe Lang
Adds an option to rdm-mailhandler to disable server certificate verification (#9496)....
r7833 response = Net::HTTPS.post_form(URI.parse(uri), data, headers, :no_check_certificate => no_check_certificate)
Jean-Philippe Lang
Adds a simple API and a standalone script that can be used to forward emails from a local or remote email server to Redmine (#1110)....
r1570 debug "Response received: #{response.code}"
Jean-Philippe Lang
mailhandler: fixes exit status and adds an explicit message if response code is 403....
r1866
Jean-Philippe Lang
Improve rdm-mailhandler exit status (#4368)....
r3029 case response.code.to_i
when 403
warn "Request was denied by your Redmine server. " +
"Make sure that 'WS for incoming emails' is enabled in application settings and that you provided the correct API key."
return 77
when 422
warn "Request was denied by your Redmine server. " +
"Possible reasons: email is sent from an invalid email address or is missing some information."
return 77
when 400..499
warn "Request was denied by your Redmine server (#{response.code})."
return 77
when 500..599
warn "Failed to contact your Redmine server (#{response.code})."
return 75
when 201
debug "Proccessed successfully"
return 0
else
return 1
end
Jean-Philippe Lang
Adds a simple API and a standalone script that can be used to forward emails from a local or remote email server to Redmine (#1110)....
r1570 end
private
def debug(msg)
puts msg if verbose
end
end
handler = RedmineMailHandler.new
Jean-Philippe Lang
Improve rdm-mailhandler exit status (#4368)....
r3029 exit(handler.submit(STDIN.read))