Commit d620ea7643e40d7edce9007dac8387929c90554a
1 parent
e073b436
Exists in
staging
and in
4 other branches
treating exception msg to client
Showing
3 changed files
with
38 additions
and
9 deletions
Show diff stats
lib/noosfero/api/helpers.rb
1 | +require 'grape' | ||
2 | + | ||
1 | module Noosfero; | 3 | module Noosfero; |
2 | 4 | ||
3 | module API | 5 | module API |
@@ -296,7 +298,12 @@ | @@ -296,7 +298,12 @@ | ||
296 | end | 298 | end |
297 | end | 299 | end |
298 | if d[:provider] == 'serpro' | 300 | if d[:provider] == 'serpro' |
299 | - raise ArgumentError, "Environment api_captcha_settings verify_uri not defined" if d[:verify_uri].nil? | 301 | + #raise ArgumentError, "Environment api_captcha_settings verify_uri not defined" if d[:verify_uri].nil? |
302 | + if d[:verify_uri].nil? | ||
303 | + msg="Environment api_captcha_settings verify_uri not defined" | ||
304 | + log msg | ||
305 | + return client_message(_('Captcha validation error'), msg) | ||
306 | + end | ||
300 | return verify_serpro_captcha(d[:serpro_client_id], params[:txtToken_captcha_serpro_gov_br], params[:captcha_text], d[:verify_uri]) | 307 | return verify_serpro_captcha(d[:serpro_client_id], params[:txtToken_captcha_serpro_gov_br], params[:captcha_text], d[:verify_uri]) |
301 | end | 308 | end |
302 | raise ArgumentError, "Environment api_captcha_settings provider not defined" | 309 | raise ArgumentError, "Environment api_captcha_settings provider not defined" |
@@ -366,15 +373,37 @@ | @@ -366,15 +373,37 @@ | ||
366 | begin | 373 | begin |
367 | body = http.request(request).body | 374 | body = http.request(request).body |
368 | rescue Exception => e | 375 | rescue Exception => e |
369 | - logger = Logger.new(File.join(Rails.root, 'log', "#{ENV['RAILS_ENV'] || 'production'}_api.log")) | ||
370 | - logger.error e | ||
371 | - return _("Serpro captcha error: #{e.message}") | 376 | + log_exception(e) |
377 | + return client_message(_('Internal captcha validation error'),"Serpro captcha error: #{e.message}") | ||
372 | end | 378 | end |
373 | return _("Wrong captcha text, please try again") if body == 0 | 379 | return _("Wrong captcha text, please try again") if body == 0 |
374 | return _("Token not found") if body == 2 | 380 | return _("Token not found") if body == 2 |
375 | body == '1' ? true : body | 381 | body == '1' ? true : body |
376 | end | 382 | end |
377 | 383 | ||
384 | + | ||
385 | + # custom_message[:prepend2log] -> Prepend2log gives more details to the application log | ||
386 | + def log_exception(e, prepend_message2log=nil) | ||
387 | + logger = Logger.new(File.join(Rails.root, 'log', "#{ENV['RAILS_ENV'] || 'production'}_api.log")) | ||
388 | + logger.formatter = GrapeLogging::Formatters::Default.new | ||
389 | + e.message = "#{prepend_message2log} e.message" if prepend_message2log.present? | ||
390 | + puts e.message | ||
391 | + logger.error e | ||
392 | + end | ||
393 | + | ||
394 | + # message[:user_message] -> Displays the message directly to user | ||
395 | + # message[:console_message] -> Displays the message to the javascript console | ||
396 | + def client_message(user_message, console_message) | ||
397 | + message = {single_message: true, user_message: user_message, console_message: console_message} | ||
398 | + message.to_json if message.present? | ||
399 | + end | ||
400 | + | ||
401 | + def log(message) | ||
402 | + logger = Logger.new(File.join(Rails.root, 'log', "#{ENV['RAILS_ENV'] || 'production'}_api.log")) | ||
403 | + logger.formatter = GrapeLogging::Formatters::Default.new | ||
404 | + logger.error message | ||
405 | + end | ||
406 | + | ||
378 | end | 407 | end |
379 | end | 408 | end |
380 | end | 409 | end |
test/unit/api/helpers_test.rb
@@ -247,9 +247,8 @@ class APIHelpersTest < ActiveSupport::TestCase | @@ -247,9 +247,8 @@ class APIHelpersTest < ActiveSupport::TestCase | ||
247 | params = {} | 247 | params = {} |
248 | params[:txtToken_captcha_serpro_gov_br] = '4324343' | 248 | params[:txtToken_captcha_serpro_gov_br] = '4324343' |
249 | params[:captcha_text] = '4324343' | 249 | params[:captcha_text] = '4324343' |
250 | - logger = Logger.new(File.join(Rails.root, 'log', 'test_api.log')) | ||
251 | - stubs(:logger).returns(logger) | ||
252 | - assert_equal test_captcha('127.0.0.1', params, environment), 'Serpro captcha error: getaddrinfo: Name or service not known' | 250 | + r = test_captcha('127.0.0.1', params, environment) |
251 | + assert_equal 'Serpro captcha error: getaddrinfo: Name or service not known', JSON.parse(r)['console_message'] | ||
253 | end | 252 | end |
254 | 253 | ||
255 | 254 |
test/unit/api/session_test.rb
@@ -39,7 +39,7 @@ class SessionTest < ActiveSupport::TestCase | @@ -39,7 +39,7 @@ class SessionTest < ActiveSupport::TestCase | ||
39 | assert_equal 400, last_response.status | 39 | assert_equal 400, last_response.status |
40 | end | 40 | end |
41 | 41 | ||
42 | - should 'detected error, Name or service not known, for Serpro Captcha communication' do | 42 | + should 'detected error, Name or service not known, for Serpro captcha communication' do |
43 | environment = Environment.default | 43 | environment = Environment.default |
44 | environment.api_captcha_settings = { | 44 | environment.api_captcha_settings = { |
45 | enabled: true, | 45 | enabled: true, |
@@ -51,7 +51,8 @@ class SessionTest < ActiveSupport::TestCase | @@ -51,7 +51,8 @@ class SessionTest < ActiveSupport::TestCase | ||
51 | params = {:login => "newuserapi", :password => "newuserapi", :password_confirmation => "newuserapi", :email => "newuserapi@email.com", | 51 | params = {:login => "newuserapi", :password => "newuserapi", :password_confirmation => "newuserapi", :email => "newuserapi@email.com", |
52 | :txtToken_captcha_serpro_gov_br => '4324343', :captcha_text => '4030320'} | 52 | :txtToken_captcha_serpro_gov_br => '4324343', :captcha_text => '4030320'} |
53 | post "/api/v1/register?#{params.to_query}" | 53 | post "/api/v1/register?#{params.to_query}" |
54 | - assert_equal "Serpro captcha error: getaddrinfo: Name or service not known", JSON.parse(last_response.body)["message"] | 54 | + message = JSON.parse(last_response.body)['message'] |
55 | + assert_equal "Serpro captcha error: getaddrinfo: Name or service not known", JSON.parse(message)['console_message'] | ||
55 | end | 56 | end |
56 | 57 | ||
57 | 58 |