Commit 88227abbc3ec9b5fe99aebc4349a410e7468a881
1 parent
5940f0c6
Exists in
master
fixed asserting hash as true
Showing
3 changed files
with
39 additions
and
61 deletions
Show diff stats
lib/recaptcha_verification.rb
... | ... | @@ -10,7 +10,6 @@ class RecaptchaVerification |
10 | 10 | if recaptcha_challenge_field == nil || recaptcha_response_field == nil |
11 | 11 | return hash_error(_('Captcha validation error'), 500, nil, _('Missing captcha data')) |
12 | 12 | end |
13 | - | |
14 | 13 | verify_hash = { |
15 | 14 | "privatekey" => private_key, |
16 | 15 | "remoteip" => remote_ip, |
... | ... | @@ -22,15 +21,12 @@ class RecaptchaVerification |
22 | 21 | https.use_ssl = true |
23 | 22 | request = Net::HTTP::Post.new(uri.path) |
24 | 23 | request.set_form_data(verify_hash) |
25 | - # begin | |
26 | - result = https.request(request).body.split("\n") | |
27 | - # rescue Exception => e | |
28 | - # return hash_error(_('Internal captcha validation error'), 500, nil, "Error validating Googles' recaptcha version 1: #{e.message}") | |
29 | - # end | |
30 | - return true if result[0] == "true" | |
31 | - return hash_error(_("Wrong captcha text, please try again"), 403, nil, "Error validating Googles' recaptcha version 1: #{result[1]}") if result[1] == "incorrect-captcha-sol" | |
24 | + body = https.request(request).body | |
25 | + captcha_result = JSON.parse(body) | |
26 | + return true if captcha_result["success"] | |
27 | + return hash_error(_("Wrong captcha text, please try again"), 403, nil, "Error validating Googles' recaptcha version 1: #{captcha_result["error-codes"]}") if captcha_result["error-codes"] == "incorrect-captcha-sol" | |
32 | 28 | #Catches all errors at the end |
33 | - return hash_error(_("Internal recaptcha validation error"), 500, nil, "Error validating Googles' recaptcha version 1: #{result[1]}") | |
29 | + return hash_error(_("Internal recaptcha validation error"), 500, nil, "Error validating Googles' recaptcha version 1: #{captcha_result["error-codes"]}") | |
34 | 30 | end |
35 | 31 | |
36 | 32 | # return true or a hash with the error |
... | ... | @@ -47,40 +43,10 @@ class RecaptchaVerification |
47 | 43 | https.use_ssl = true |
48 | 44 | request = Net::HTTP::Post.new(uri.path) |
49 | 45 | request.set_form_data(verify_hash) |
50 | - # begin | |
51 | - body = https.request(request).body | |
52 | - # rescue Exception => e | |
53 | - # return hash_error(_('Internal captcha validation error'), 500, nil, "recaptcha error: #{e.message}") | |
54 | - # end | |
46 | + body = https.request(request).body | |
55 | 47 | captcha_result = JSON.parse(body) |
56 | 48 | return true if captcha_result["success"] |
57 | 49 | return hash_error(_("Wrong captcha text, please try again"), 403, body, captcha_result["error-codes"]) |
58 | 50 | end |
59 | 51 | |
60 | - # return true or a hash with the error | |
61 | - # :user_message, :status, :log_message, :javascript_console_message | |
62 | - def verify_serpro_captcha(client_id, token, captcha_text, verify_uri) | |
63 | - msg_icve = _('Internal captcha validation error') | |
64 | - msg_esca = 'Environment recaptcha_plugin_attributes' | |
65 | - return hash_error(msg_icve, 500, nil, "#{msg_esca} verify_uri not defined") if verify_uri.nil? | |
66 | - return hash_error(msg_icve, 500, nil, "#{msg_esca} client_id not defined") if client_id.nil? | |
67 | - return hash_error(_("Error processing token validation"), 500, nil, _("Missing Serpro's Captcha token")) unless token | |
68 | - return hash_error(_('Captcha text has not been filled'), 403) unless captcha_text | |
69 | - uri = URI(verify_uri) | |
70 | - http = Net::HTTP.new(uri.host, uri.port) | |
71 | - request = Net::HTTP::Post.new(uri.path) | |
72 | - verify_string = "#{client_id}&#{token}&#{captcha_text}" | |
73 | - request.body = verify_string | |
74 | - body = http.request(request).body | |
75 | - return true if body == '1' | |
76 | - return hash_error(_("Internal captcha validation error"), 500, body, "Unable to reach Serpro's Captcha validation service") if body == "Activity timed out" | |
77 | - return hash_error(_("Wrong captcha text, please try again"), 403) if body == '0' | |
78 | - return hash_error(_("Serpro's captcha token not found"), 500) if body == '2' | |
79 | - return hash_error(_("No data sent to validation server or other serious problem"), 500) if body == -1 | |
80 | - #Catches all errors at the end | |
81 | - return hash_error(_("Internal captcha validation error"), 500, nil, "Error validating Serpro's captcha service returned: #{body}") | |
82 | - end | |
83 | - | |
84 | - | |
85 | - | |
86 | 52 | end | ... | ... |
test/test_helper.rb
test/unit/recaptcha_verification_test.rb
... | ... | @@ -17,17 +17,16 @@ class RecaptchaVerificationTest < ActiveSupport::TestCase |
17 | 17 | @params = {} |
18 | 18 | @params[:remoteip] = @remoteip |
19 | 19 | if version.to_i == 1 |
20 | - #wont go to google thanks to webmock | |
20 | + # won't go to google thanks to webmock | |
21 | 21 | @verify_uri = 'https://www.google.com/recaptcha/api/verify' |
22 | 22 | @params[:privatekey] = @environment.recaptcha_private_key |
23 | 23 | @params[:challenge] = "challenge" |
24 | 24 | @params[:response] = "response" |
25 | - | |
26 | 25 | @params[:recaptcha_challenge_field] = @params[:challenge] |
27 | 26 | @params[:recaptcha_response_field] = @params[:response] |
28 | 27 | end |
29 | 28 | if version.to_i == 2 |
30 | - #wont go to google thanks to webmock | |
29 | + # won't go to google thanks to webmock | |
31 | 30 | @verify_uri = 'https://www.google.com/recaptcha/api/siteverify' |
32 | 31 | @params[:secret] = @environment.recaptcha_private_key |
33 | 32 | @params[:response] = "response" |
... | ... | @@ -55,7 +54,8 @@ class RecaptchaVerificationTest < ActiveSupport::TestCase |
55 | 54 | setup_captcha(version) |
56 | 55 | validate_captcha(version) |
57 | 56 | r = RecaptchaPlugin.new.test_captcha(@remoteip, @params, @environment) |
58 | - assert r | |
57 | + assert_not_kind_of Hash, r | |
58 | + assert_equal true, r | |
59 | 59 | end |
60 | 60 | |
61 | 61 | should 'fail recaptcha version 1' do |
... | ... | @@ -63,16 +63,16 @@ class RecaptchaVerificationTest < ActiveSupport::TestCase |
63 | 63 | setup_captcha(version) |
64 | 64 | validate_captcha(version, false) |
65 | 65 | r = RecaptchaPlugin.new.test_captcha(@remoteip, @params, @environment) |
66 | - assert r | |
66 | + assert_kind_of Hash, r | |
67 | 67 | end |
68 | 68 | |
69 | 69 | should 'pass recaptcha version 2' do |
70 | 70 | version = 2 |
71 | 71 | setup_captcha(version) |
72 | 72 | validate_captcha(version) |
73 | - rp = RecaptchaPlugin.new | |
74 | - r = rp.test_captcha(@remoteip, @params, @environment) | |
75 | - assert r | |
73 | + r = RecaptchaPlugin.new.test_captcha(@remoteip, @params, @environment) | |
74 | + assert_not_kind_of Hash, r | |
75 | + assert_equal true, r | |
76 | 76 | end |
77 | 77 | |
78 | 78 | should 'fail recaptcha version 2' do |
... | ... | @@ -80,6 +80,7 @@ class RecaptchaVerificationTest < ActiveSupport::TestCase |
80 | 80 | setup_captcha(version) |
81 | 81 | validate_captcha(version, false) |
82 | 82 | r = RecaptchaPlugin.new.test_captcha(@remoteip, @params, @environment) |
83 | + assert_kind_of Hash, r | |
83 | 84 | assert_equal r[:user_message], _("Wrong captcha text, please try again") |
84 | 85 | end |
85 | 86 | |
... | ... | @@ -109,7 +110,6 @@ class RecaptchaVerificationTest < ActiveSupport::TestCase |
109 | 110 | assert_equal json["message"], _("Wrong captcha text, please try again") |
110 | 111 | end |
111 | 112 | |
112 | - | |
113 | 113 | should 'fail captcha if user has not filled recaptcha_verify_uri v1 text' do |
114 | 114 | version = 1 |
115 | 115 | setup_captcha(version) |
... | ... | @@ -124,17 +124,31 @@ class RecaptchaVerificationTest < ActiveSupport::TestCase |
124 | 124 | article = create_article('Article 1') |
125 | 125 | params = {} |
126 | 126 | params[:value] = 1 |
127 | + post "/api/v1/articles/#{article.id}/vote?#{params.to_query}" | |
128 | + json = JSON.parse(last_response.body) | |
129 | + assert_equal 401, last_response.status | |
130 | + end | |
127 | 131 | |
132 | + should 'not perform a vote if recaptcha 1 fails' do | |
133 | + version = 1 | |
134 | + setup_captcha(version) | |
135 | + validate_captcha(version, false) | |
136 | + post "/api/v1/login-captcha?#{@params.to_query}" | |
137 | + json = JSON.parse(last_response.body) | |
138 | + article = create_article('Article 1') | |
139 | + params = {} | |
140 | + params[:private_token] = json['private_token'] | |
141 | + params[:value] = 1 | |
128 | 142 | post "/api/v1/articles/#{article.id}/vote?#{params.to_query}" |
129 | 143 | json = JSON.parse(last_response.body) |
130 | 144 | assert_equal 401, last_response.status |
131 | 145 | end |
132 | 146 | |
133 | - should 'perform a vote on an article identified by id' do | |
134 | - version = 2 | |
147 | + should 'perform a vote on an article identified by id using recaptcha 1' do | |
148 | + version = 1 | |
135 | 149 | setup_captcha(version) |
136 | 150 | validate_captcha(version) |
137 | - post "/api/v1/login-captcha?#{params.to_query}" | |
151 | + post "/api/v1/login-captcha?#{@params.to_query}" | |
138 | 152 | json = JSON.parse(last_response.body) |
139 | 153 | article = create_article('Article 1') |
140 | 154 | params = {} |
... | ... | @@ -146,10 +160,10 @@ class RecaptchaVerificationTest < ActiveSupport::TestCase |
146 | 160 | assert_equal true, json['vote'] |
147 | 161 | end |
148 | 162 | |
149 | - should 'not perform a vote if recaptcha 2 fails' do | |
163 | + should 'perform a vote on an article identified by id using recaptcha 2' do | |
150 | 164 | version = 2 |
151 | 165 | setup_captcha(version) |
152 | - validate_captcha(version, false) | |
166 | + validate_captcha(version) | |
153 | 167 | post "/api/v1/login-captcha?#{@params.to_query}" |
154 | 168 | json = JSON.parse(last_response.body) |
155 | 169 | article = create_article('Article 1') |
... | ... | @@ -158,11 +172,12 @@ class RecaptchaVerificationTest < ActiveSupport::TestCase |
158 | 172 | params[:value] = 1 |
159 | 173 | post "/api/v1/articles/#{article.id}/vote?#{params.to_query}" |
160 | 174 | json = JSON.parse(last_response.body) |
161 | - assert_equal 401, last_response.status | |
175 | + assert_not_equal 401, last_response.status | |
176 | + assert_equal true, json['vote'] | |
162 | 177 | end |
163 | 178 | |
164 | - should 'not perform a vote if recaptcha 1 fails' do | |
165 | - version = 1 | |
179 | + should 'not perform a vote if recaptcha 2 fails' do | |
180 | + version = 2 | |
166 | 181 | setup_captcha(version) |
167 | 182 | validate_captcha(version, false) |
168 | 183 | post "/api/v1/login-captcha?#{@params.to_query}" |
... | ... | @@ -176,5 +191,4 @@ class RecaptchaVerificationTest < ActiveSupport::TestCase |
176 | 191 | assert_equal 401, last_response.status |
177 | 192 | end |
178 | 193 | |
179 | - | |
180 | 194 | end | ... | ... |