Commit d620ea7643e40d7edce9007dac8387929c90554a

Authored by Evandro Junior
1 parent e073b436

treating exception msg to client

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