Skip to content

Commit

Permalink
dont error out on invalid xml payload
Browse files Browse the repository at this point in the history
- also fix test case
  • Loading branch information
jkraemer committed Apr 27, 2015
1 parent 019dccd commit 791899a
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 15 deletions.
2 changes: 1 addition & 1 deletion app/controllers/notices_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,7 @@ def cleanup_path(path)
def check_enabled
User.current = nil
parse_request
unless @api_key == Setting.mail_handler_api_key
unless @api_key.present? and @api_key == Setting.mail_handler_api_key
render :text => 'Access denied. Redmine API is disabled or key is invalid.', :status => 403
false
end
Expand Down
2 changes: 1 addition & 1 deletion app/models/hoptoad_v2_notice.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ class HoptoadV2Notice

def initialize(data)
xml = Nokogiri::XML(data)
@redmine_params = YAML.load(xml.xpath('//api-key').first, :safe => true)
@redmine_params = YAML.load(xml.xpath('//api-key').first.content, :safe => true) rescue {}

error = {
'class' => (xml.xpath('//error/class').first.content rescue nil),
Expand Down
26 changes: 13 additions & 13 deletions test/unit/hoptoad_v2_notice_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@ class HoptoadV2NoticeTest < ActiveSupport::TestCase

test 'should parse redmine params' do
assert params = @notice.redmine_params
assert_equal('Exception', params[:tracker])
assert_equal('etelweb', params[:environment])
assert_equal(5, params[:priority])
assert_equal('etel10000', params[:project])
assert_equal('kTewumGFbZPhek7RNZRl', params[:api_key])
assert_equal('/serviceportal', params[:repository_root])
assert_equal('Exception', params['tracker'], params.inspect)
assert_equal('etelweb', params['environment'])
assert_equal(5, params['priority'])
assert_equal('etel10000', params['project'])
assert_equal('kTewumGFbZPhek7RNZRl', params['api_key'])
assert_equal('/serviceportal', params['repository_root'])
end

test 'should parse server environment' do
Expand Down Expand Up @@ -51,15 +51,15 @@ class HoptoadV2NoticeTest < ActiveSupport::TestCase
def setup
@raw_post = <<-DATA
<?xml version="1.0" encoding="UTF-8"?><notice version="2.0"><api-key>---
:tracker: Exception
:environment: etelweb
:priority: 5
:repository_root: /serviceportal
:project: etel10000
:api_key: kTewumGFbZPhek7RNZRl
tracker: Exception
environment: etelweb
priority: 5
repository_root: /serviceportal
project: etel10000
api_key: kTewumGFbZPhek7RNZRl
</api-key><notifier><name>Hoptoad Notifier</name><version>2.4.11</version><url>http://hoptoadapp.com</url></notifier><error><class>RuntimeError</class><message>RuntimeError: pretty print me!</message><backtrace><line number="6" file="[PROJECT_ROOT]/app/views/layouts/serviceportal.html.erb" method="_run_erb_app47views47layouts47serviceportal46html46erb"/><line number="34" file="[GEM_ROOT]/gems/actionpack-2.3.14/lib/action_view/renderable.rb" method="send"/><line number="34" file="[GEM_ROOT]/gems/actionpack-2.3.14/lib/action_view/renderable.rb" method="render"/><line number="306" file="[GEM_ROOT]/gems/actionpack-2.3.14/lib/action_view/base.rb" method="with_template"/><line number="30" file="[GEM_ROOT]/gems/actionpack-2.3.14/lib/action_view/renderable.rb" method="render"/><line number="205" file="[GEM_ROOT]/gems/actionpack-2.3.14/lib/action_view/template.rb" method="render_template"/><line number="265" file="[GEM_ROOT]/gems/actionpack-2.3.14/lib/action_view/base.rb" method="render"/><line number="352" file="[GEM_ROOT]/gems/actionpack-2.3.14/lib/action_view/base.rb" method="_render_with_layout"/><line number="262" file="[GEM_ROOT]/gems/actionpack-2.3.14/lib/action_view/base.rb" method="render"/><line number="1252" file="[GEM_ROOT]/gems/actionpack-2.3.14/lib/action_controller/base.rb" method="render_for_file"/><line number="936" file="[GEM_ROOT]/gems/actionpack-2.3.14/lib/action_controller/base.rb" method="render_without_benchmark"/><line number="51" file="[GEM_ROOT]/gems/actionpack-2.3.14/lib/action_controller/benchmarking.rb" method="render_without_checking_tainted"/><line number="17" file="[GEM_ROOT]/gems/activesupport-2.3.14/lib/active_support/core_ext/benchmark.rb" method="ms"/><line number="308" file="/Users/jk/.rvm/rubies/ree-1.8.7-2011.03/lib/ruby/1.8/benchmark.rb" method="realtime"/><line number="17" file="[GEM_ROOT]/gems/activesupport-2.3.14/lib/active_support/core_ext/benchmark.rb" method="ms"/><line number="51" file="[GEM_ROOT]/gems/actionpack-2.3.14/lib/action_controller/benchmarking.rb" method="render_without_checking_tainted"/><line number="16" file="[PROJECT_ROOT]/vendor/plugins/safe_erb/lib/safe_erb.rb" method="render"/><line number="63" file="[PROJECT_ROOT]/vendor/plugins/safe_erb/lib/safe_erb.rb" method="with_checking_tainted"/><line number="15" file="[PROJECT_ROOT]/vendor/plugins/safe_erb/lib/safe_erb.rb" method="render"/><line number="1328" file="[GEM_ROOT]/gems/actionpack-2.3.14/lib/action_controller/base.rb" method="default_render"/><line number="1334" file="[GEM_ROOT]/gems/actionpack-2.3.14/lib/action_controller/base.rb" method="perform_action_without_filters"/><line number="617" file="[GEM_ROOT]/gems/actionpack-2.3.14/lib/action_controller/filters.rb" method="call_filters"/><line number="610" file="[GEM_ROOT]/gems/actionpack-2.3.14/lib/action_controller/filters.rb" method="perform_action_without_benchmark"/><line number="68" file="[GEM_ROOT]/gems/actionpack-2.3.14/lib/action_controller/benchmarking.rb" method="perform_action_without_rescue"/><line number="17" file="[GEM_ROOT]/gems/activesupport-2.3.14/lib/active_support/core_ext/benchmark.rb" method="ms"/><line number="308" file="/Users/jk/.rvm/rubies/ree-1.8.7-2011.03/lib/ruby/1.8/benchmark.rb" method="realtime"/><line number="17" file="[GEM_ROOT]/gems/activesupport-2.3.14/lib/active_support/core_ext/benchmark.rb" method="ms"/><line number="68" file="[GEM_ROOT]/gems/actionpack-2.3.14/lib/action_controller/benchmarking.rb" method="perform_action_without_rescue"/><line number="160" file="[GEM_ROOT]/gems/actionpack-2.3.14/lib/action_controller/rescue.rb" method="perform_action_without_flash"/><line number="151" file="[GEM_ROOT]/gems/actionpack-2.3.14/lib/action_controller/flash.rb" method="perform_action"/><line number="532" file="[GEM_ROOT]/gems/actionpack-2.3.14/lib/action_controller/base.rb" method="send"/><line number="532" file="[GEM_ROOT]/gems/actionpack-2.3.14/lib/action_controller/base.rb" method="process_without_filters"/><line number="606" file="[GEM_ROOT]/gems/actionpack-2.3.14/lib/action_controller/filters.rb" method="process"/><line number="391" file="[GEM_ROOT]/gems/actionpack-2.3.14/lib/action_controller/base.rb" method="process"/><line number="386" file="[GEM_ROOT]/gems/actionpack-2.3.14/lib/action_controller/base.rb" method="call"/><line number="438" file="[GEM_ROOT]/gems/actionpack-2.3.14/lib/action_controller/routing/route_set.rb" method="call"/><line number="87" file="[GEM_ROOT]/gems/actionpack-2.3.14/lib/action_controller/dispatcher.rb" method="dispatch"/><line number="121" file="[GEM_ROOT]/gems/actionpack-2.3.14/lib/action_controller/dispatcher.rb" method="_call"/><line number="130" file="[GEM_ROOT]/gems/actionpack-2.3.14/lib/action_controller/dispatcher.rb" method="build_middleware_stack"/><line number="25" file="[GEM_ROOT]/gems/actionpack-2.3.14/lib/action_controller/string_coercion.rb" method="call"/><line number="25" file="[GEM_ROOT]/gems/actionpack-2.3.14/lib/action_controller/string_coercion.rb" method="call"/><line number="9" file="[GEM_ROOT]/gems/rack-1.1.2/lib/rack/head.rb" method="call"/><line number="24" file="[GEM_ROOT]/gems/rack-1.1.2/lib/rack/methodoverride.rb" method="call"/><line number="15" file="[GEM_ROOT]/gems/actionpack-2.3.14/lib/action_controller/params_parser.rb" method="call"/><line number="177" file="[GEM_ROOT]/gems/actionpack-2.3.14/lib/action_controller/session/abstract_store.rb" method="call"/><line number="29" file="[GEM_ROOT]/gems/activerecord-2.3.14/lib/active_record/query_cache.rb" method="call"/><line number="34" file="[GEM_ROOT]/gems/activerecord-2.3.14/lib/active_record/connection_adapters/abstract/query_cache.rb" method="cache"/><line number="9" file="[GEM_ROOT]/gems/activerecord-2.3.14/lib/active_record/query_cache.rb" method="cache"/><line number="28" file="[GEM_ROOT]/gems/activerecord-2.3.14/lib/active_record/query_cache.rb" method="call"/><line number="361" file="[GEM_ROOT]/gems/activerecord-2.3.14/lib/active_record/connection_adapters/abstract/connection_pool.rb" method="call"/><line number="26" file="[GEM_ROOT]/gems/actionpack-2.3.14/lib/action_controller/failsafe.rb" method="call"/><line number="11" file="[GEM_ROOT]/gems/rack-1.1.2/lib/rack/lock.rb" method="call"/><line number="11" file="[GEM_ROOT]/gems/rack-1.1.2/lib/rack/lock.rb" method="synchronize"/><line number="11" file="[GEM_ROOT]/gems/rack-1.1.2/lib/rack/lock.rb" method="call"/><line number="106" file="[GEM_ROOT]/gems/actionpack-2.3.14/lib/action_controller/dispatcher.rb" method="call"/><line number="31" file="[GEM_ROOT]/gems/rails-2.3.14/lib/rails/rack/static.rb" method="call"/><line number="47" file="[GEM_ROOT]/gems/rack-1.1.2/lib/rack/urlmap.rb" method="call"/><line number="41" file="[GEM_ROOT]/gems/rack-1.1.2/lib/rack/urlmap.rb" method="each"/><line number="41" file="[GEM_ROOT]/gems/rack-1.1.2/lib/rack/urlmap.rb" method="call"/><line number="17" file="[GEM_ROOT]/gems/rails-2.3.14/lib/rails/rack/log_tailer.rb" method="call"/><line number="13" file="[GEM_ROOT]/gems/rack-1.1.2/lib/rack/content_length.rb" method="call"/><line number="48" file="[GEM_ROOT]/gems/rack-1.1.2/lib/rack/handler/webrick.rb" method="service"/><line number="104" file="/Users/jk/.rvm/rubies/ree-1.8.7-2011.03/lib/ruby/1.8/webrick/httpserver.rb" method="service"/><line number="65" file="/Users/jk/.rvm/rubies/ree-1.8.7-2011.03/lib/ruby/1.8/webrick/httpserver.rb" method="run"/><line number="173" file="/Users/jk/.rvm/rubies/ree-1.8.7-2011.03/lib/ruby/1.8/webrick/server.rb" method="start_thread"/><line number="162" file="/Users/jk/.rvm/rubies/ree-1.8.7-2011.03/lib/ruby/1.8/webrick/server.rb" method="start"/><line number="162" file="/Users/jk/.rvm/rubies/ree-1.8.7-2011.03/lib/ruby/1.8/webrick/server.rb" method="start_thread"/><line number="95" file="/Users/jk/.rvm/rubies/ree-1.8.7-2011.03/lib/ruby/1.8/webrick/server.rb" method="start"/><line number="92" file="/Users/jk/.rvm/rubies/ree-1.8.7-2011.03/lib/ruby/1.8/webrick/server.rb" method="each"/><line number="92" file="/Users/jk/.rvm/rubies/ree-1.8.7-2011.03/lib/ruby/1.8/webrick/server.rb" method="start"/><line number="23" file="/Users/jk/.rvm/rubies/ree-1.8.7-2011.03/lib/ruby/1.8/webrick/server.rb" method="start"/><line number="82" file="/Users/jk/.rvm/rubies/ree-1.8.7-2011.03/lib/ruby/1.8/webrick/server.rb" method="start"/><line number="14" file="[GEM_ROOT]/gems/rack-1.1.2/lib/rack/handler/webrick.rb" method="run"/><line number="111" file="[GEM_ROOT]/gems/rails-2.3.14/lib/commands/server.rb" method=""/><line number="3" file="script/server" method="require"/><line number="3" file="script/server" method=""/></backtrace></error><request><url>https://cul8er.local:3001/</url><component>meta</component><action>index</action><params><var key="action">index</var><var key="controller">meta</var></params><cgi-data><var key="rack.session"></var><var key="HTTP_ACCEPT">text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8</var><var key="HTTP_CACHE_CONTROL">max-age=0</var><var key="HTTP_HOST">cul8er.local:3001</var><var key="SERVER_NAME">cul8er.local</var><var key="rack.session.record">#&lt;Mysql2Session:0x10a726478&gt;</var><var key="rack.request.cookie_hash"><var key="_serviceportal_session">bf0f0d01d6d04ab48741df7f35ea53ef</var></var><var key="HTTP_USER_AGENT">Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_1) AppleWebKit/534.48.3 (KHTML, like Gecko) Version/5.1 Safari/534.48.3</var><var key="REQUEST_PATH">/</var><var key="rack.url_scheme">http</var><var key="REMOTE_HOST">cul8er.local</var><var key="action_controller.request.request_parameters"></var><var key="HTTP_ACCEPT_LANGUAGE">en-us</var><var key="rack.errors">#&lt;IO:0x1001c8a80&gt;</var><var key="SERVER_PROTOCOL">HTTP/1.1</var><var key="REMOTE_ADDR">127.0.0.1</var><var key="rack.run_once">false</var><var key="rack.version">11</var><var key="SERVER_SOFTWARE">WEBrick/1.3.1 (Ruby/1.8.7/2011-02-18)</var><var key="PATH_INFO">/</var><var key="SCRIPT_NAME"></var><var key="rack.request.cookie_string">_serviceportal_session=bf0f0d01d6d04ab48741df7f35ea53ef</var><var key="HTTP_COOKIE">_serviceportal_session=bf0f0d01d6d04ab48741df7f35ea53ef</var><var key="HTTP_VERSION">HTTP/1.1</var><var key="rack.multithread">false</var><var key="REQUEST_URI">http://cul8er.local:3001/</var><var key="rack.multiprocess">false</var><var key="action_controller.request.path_parameters"><var key="action">index</var><var key="controller">meta</var></var><var key="SERVER_PORT">3001</var><var key="rack.request.query_hash"></var><var key="REQUEST_METHOD">GET</var><var key="rack.session.options"><var key="key">_serviceportal_session</var><var key="expire_after">28800</var><var key="secret">f751eb35fad0de80dc5c5cd43c6c45ebe17454af83ae9f1687bafdd9d1b7347b45b738f1c1da68d57551d68dc492424eac9b64d069e203ed2852cbacc0ed1837</var><var key="domain"></var><var key="httponly">true</var><var key="path">/</var><var key="secure">false</var><var key="cookie_only">true</var><var key="id">bf0f0d01d6d04ab48741df7f35ea53ef</var></var><var key="action_controller.rescue.request">#&lt;ActionController::Request:0x10a7297b8&gt;</var><var key="action_controller.request.query_parameters"></var><var key="rack.request.query_string"></var><var key="GATEWAY_INTERFACE">CGI/1.1</var><var key="HTTP_CONNECTION">keep-alive</var><var key="rack.input">#&lt;StringIO:0x10a72b0b8&gt;</var><var key="HTTP_ACCEPT_ENCODING">gzip, deflate</var><var key="QUERY_STRING"></var><var key="action_controller.rescue.response">#&lt;ActionController::Response:0x10a7294e8&gt;</var></cgi-data></request><server-environment><project-root>/Users/jk/code/webit/etel/serviceportal</project-root><environment-name>production</environment-name><hostname>blender.local</hostname></server-environment></notice>
DATA
@notice = HoptoadV2Notice.new @raw_post
end

end
end

0 comments on commit 791899a

Please sign in to comment.