From 791899a8cf9460a38d3bd071ea8d617f65066dc0 Mon Sep 17 00:00:00 2001 From: Jens Kraemer Date: Mon, 27 Apr 2015 11:17:34 +0200 Subject: [PATCH] dont error out on invalid xml payload - also fix test case --- app/controllers/notices_controller.rb | 2 +- app/models/hoptoad_v2_notice.rb | 2 +- test/unit/hoptoad_v2_notice_test.rb | 26 +++++++++++++------------- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/app/controllers/notices_controller.rb b/app/controllers/notices_controller.rb index 52b9cf6..887df98 100644 --- a/app/controllers/notices_controller.rb +++ b/app/controllers/notices_controller.rb @@ -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 diff --git a/app/models/hoptoad_v2_notice.rb b/app/models/hoptoad_v2_notice.rb index 3b9b0dd..01cb2cf 100644 --- a/app/models/hoptoad_v2_notice.rb +++ b/app/models/hoptoad_v2_notice.rb @@ -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), diff --git a/test/unit/hoptoad_v2_notice_test.rb b/test/unit/hoptoad_v2_notice_test.rb index 2b058d8..d8ffc7b 100644 --- a/test/unit/hoptoad_v2_notice_test.rb +++ b/test/unit/hoptoad_v2_notice_test.rb @@ -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 @@ -51,15 +51,15 @@ class HoptoadV2NoticeTest < ActiveSupport::TestCase def setup @raw_post = <<-DATA --- - :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 Hoptoad Notifier2.4.11http://hoptoadapp.comRuntimeErrorRuntimeError: pretty print me!https://cul8er.local:3001/metaindexindexmetatext/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8max-age=0cul8er.local:3001cul8er.local#<Mysql2Session:0x10a726478>bf0f0d01d6d04ab48741df7f35ea53efMozilla/5.0 (Macintosh; Intel Mac OS X 10_7_1) AppleWebKit/534.48.3 (KHTML, like Gecko) Version/5.1 Safari/534.48.3/httpcul8er.localen-us#<IO:0x1001c8a80>HTTP/1.1127.0.0.1false11WEBrick/1.3.1 (Ruby/1.8.7/2011-02-18)/_serviceportal_session=bf0f0d01d6d04ab48741df7f35ea53ef_serviceportal_session=bf0f0d01d6d04ab48741df7f35ea53efHTTP/1.1falsehttp://cul8er.local:3001/falseindexmeta3001GET_serviceportal_session28800f751eb35fad0de80dc5c5cd43c6c45ebe17454af83ae9f1687bafdd9d1b7347b45b738f1c1da68d57551d68dc492424eac9b64d069e203ed2852cbacc0ed1837true/falsetruebf0f0d01d6d04ab48741df7f35ea53ef#<ActionController::Request:0x10a7297b8>CGI/1.1keep-alive#<StringIO:0x10a72b0b8>gzip, deflate#<ActionController::Response:0x10a7294e8>/Users/jk/code/webit/etel/serviceportalproductionblender.local DATA @notice = HoptoadV2Notice.new @raw_post end -end \ No newline at end of file +end