aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/gems/recaptcha-0.3.1/lib/recaptcha/verify.rb
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/gems/recaptcha-0.3.1/lib/recaptcha/verify.rb')
-rw-r--r--vendor/gems/recaptcha-0.3.1/lib/recaptcha/verify.rb51
1 files changed, 51 insertions, 0 deletions
diff --git a/vendor/gems/recaptcha-0.3.1/lib/recaptcha/verify.rb b/vendor/gems/recaptcha-0.3.1/lib/recaptcha/verify.rb
new file mode 100644
index 000000000..733ce31be
--- /dev/null
+++ b/vendor/gems/recaptcha-0.3.1/lib/recaptcha/verify.rb
@@ -0,0 +1,51 @@
+module Recaptcha
+ module Verify
+ # Your private API can be specified in the +options+ hash or preferably
+ # using the Configuration.
+ def verify_recaptcha(options = {})
+ if !options.is_a? Hash
+ options = {:model => options}
+ end
+
+ env = options[:env] || ENV['RAILS_ENV']
+ return true if Recaptcha.configuration.skip_verify_env.include? env
+ model = options[:model]
+ attribute = options[:attribute] || :base
+ private_key = options[:private_key] || Recaptcha.configuration.private_key
+ raise RecaptchaError, "No private key specified." unless private_key
+
+ begin
+ recaptcha = nil
+ Timeout::timeout(options[:timeout] || 3) do
+ recaptcha = Net::HTTP.post_form URI.parse(Recaptcha.configuration.verify_url), {
+ "privatekey" => private_key,
+ "remoteip" => request.remote_ip,
+ "challenge" => params[:recaptcha_challenge_field],
+ "response" => params[:recaptcha_response_field]
+ }
+ end
+ answer, error = recaptcha.body.split.map { |s| s.chomp }
+ unless answer == 'true'
+ flash[:recaptcha_error] = error
+ if model
+ model.valid?
+ model.errors.add attribute, options[:message] || "Word verification response is incorrect, please try again."
+ end
+ return false
+ else
+ flash[:recaptcha_error] = nil
+ return true
+ end
+ rescue Timeout::Error
+ flash[:recaptcha_error] = "recaptcha-not-reachable"
+ if model
+ model.valid?
+ model.errors.add attribute, options[:message] || "Oops, we failed to validate your word verification response. Please try again."
+ end
+ return false
+ rescue Exception => e
+ raise RecaptchaError, e.message, e.backtrace
+ end
+ end # verify_recaptcha
+ end # Verify
+end # Recaptcha