From d620ea7643e40d7edce9007dac8387929c90554a Mon Sep 17 00:00:00 2001 From: Evandro Junior Date: Wed, 15 Jul 2015 20:00:09 -0300 Subject: [PATCH] treating exception msg to client --- lib/noosfero/api/helpers.rb | 37 +++++++++++++++++++++++++++++++++---- test/unit/api/helpers_test.rb | 5 ++--- test/unit/api/session_test.rb | 5 +++-- 3 files changed, 38 insertions(+), 9 deletions(-) diff --git a/lib/noosfero/api/helpers.rb b/lib/noosfero/api/helpers.rb index adce98e..91fbe1e 100644 --- a/lib/noosfero/api/helpers.rb +++ b/lib/noosfero/api/helpers.rb @@ -1,3 +1,5 @@ +require 'grape' + module Noosfero; module API @@ -296,7 +298,12 @@ end end if d[:provider] == 'serpro' - raise ArgumentError, "Environment api_captcha_settings verify_uri not defined" if d[:verify_uri].nil? + #raise ArgumentError, "Environment api_captcha_settings verify_uri not defined" if d[:verify_uri].nil? + if d[:verify_uri].nil? + msg="Environment api_captcha_settings verify_uri not defined" + log msg + return client_message(_('Captcha validation error'), msg) + end return verify_serpro_captcha(d[:serpro_client_id], params[:txtToken_captcha_serpro_gov_br], params[:captcha_text], d[:verify_uri]) end raise ArgumentError, "Environment api_captcha_settings provider not defined" @@ -366,15 +373,37 @@ begin body = http.request(request).body rescue Exception => e - logger = Logger.new(File.join(Rails.root, 'log', "#{ENV['RAILS_ENV'] || 'production'}_api.log")) - logger.error e - return _("Serpro captcha error: #{e.message}") + log_exception(e) + return client_message(_('Internal captcha validation error'),"Serpro captcha error: #{e.message}") end return _("Wrong captcha text, please try again") if body == 0 return _("Token not found") if body == 2 body == '1' ? true : body end + + # custom_message[:prepend2log] -> Prepend2log gives more details to the application log + def log_exception(e, prepend_message2log=nil) + logger = Logger.new(File.join(Rails.root, 'log', "#{ENV['RAILS_ENV'] || 'production'}_api.log")) + logger.formatter = GrapeLogging::Formatters::Default.new + e.message = "#{prepend_message2log} e.message" if prepend_message2log.present? + puts e.message + logger.error e + end + + # message[:user_message] -> Displays the message directly to user + # message[:console_message] -> Displays the message to the javascript console + def client_message(user_message, console_message) + message = {single_message: true, user_message: user_message, console_message: console_message} + message.to_json if message.present? + end + + def log(message) + logger = Logger.new(File.join(Rails.root, 'log', "#{ENV['RAILS_ENV'] || 'production'}_api.log")) + logger.formatter = GrapeLogging::Formatters::Default.new + logger.error message + end + end end end diff --git a/test/unit/api/helpers_test.rb b/test/unit/api/helpers_test.rb index dd2e28b..60562e3 100644 --- a/test/unit/api/helpers_test.rb +++ b/test/unit/api/helpers_test.rb @@ -247,9 +247,8 @@ class APIHelpersTest < ActiveSupport::TestCase params = {} params[:txtToken_captcha_serpro_gov_br] = '4324343' params[:captcha_text] = '4324343' - logger = Logger.new(File.join(Rails.root, 'log', 'test_api.log')) - stubs(:logger).returns(logger) - assert_equal test_captcha('127.0.0.1', params, environment), 'Serpro captcha error: getaddrinfo: Name or service not known' + r = test_captcha('127.0.0.1', params, environment) + assert_equal 'Serpro captcha error: getaddrinfo: Name or service not known', JSON.parse(r)['console_message'] end diff --git a/test/unit/api/session_test.rb b/test/unit/api/session_test.rb index b55fd7e..fda5444 100644 --- a/test/unit/api/session_test.rb +++ b/test/unit/api/session_test.rb @@ -39,7 +39,7 @@ class SessionTest < ActiveSupport::TestCase assert_equal 400, last_response.status end - should 'detected error, Name or service not known, for Serpro Captcha communication' do + should 'detected error, Name or service not known, for Serpro captcha communication' do environment = Environment.default environment.api_captcha_settings = { enabled: true, @@ -51,7 +51,8 @@ class SessionTest < ActiveSupport::TestCase params = {:login => "newuserapi", :password => "newuserapi", :password_confirmation => "newuserapi", :email => "newuserapi@email.com", :txtToken_captcha_serpro_gov_br => '4324343', :captcha_text => '4030320'} post "/api/v1/register?#{params.to_query}" - assert_equal "Serpro captcha error: getaddrinfo: Name or service not known", JSON.parse(last_response.body)["message"] + message = JSON.parse(last_response.body)['message'] + assert_equal "Serpro captcha error: getaddrinfo: Name or service not known", JSON.parse(message)['console_message'] end -- libgit2 0.21.2