0
@@ -3,22 +3,27 @@ module Ambethia
0
RECAPTCHA_API_SERVER = 'http://api.recaptcha.net';
0
RECAPTCHA_API_SECURE_SERVER = 'https://api-secure.recaptcha.net';
0
- RECAPTCHA_VERIFY_SERVER = '
api-verify.recaptcha.net';
0
+ RECAPTCHA_VERIFY_SERVER = '
http://api-verify.recaptcha.net/verify';
0
SKIP_VERIFY_ENV = ['test']
0
+ mattr_accessor :public_key, :private_key
0
# Your public API can be specified in the +options+ hash or preferably the environment
0
# variable +RECAPTCHA_PUBLIC_KEY+.
0
def recaptcha_tags(options = {})
0
- key = options[:public_key] ||= ENV['RECAPTCHA_PUBLIC_KEY']
0
- error = options[:error] ||= session[:recaptcha_error]
0
- uri = options[:ssl] ? RECAPTCHA_API_SECURE_SERVER : RECAPTCHA_API_SERVER
0
- xhtml = Builder::XmlMarkup.new :target => out=(''), :indent => 2 # Because I can.
0
+ key = (options[:public_key] || Ambethia::Recaptcha.public_key)
0
+ raise ReCaptchaError, "No public key specified." unless key
0
+ error = (options[:error] || session[:recaptcha_error])
0
+ uri = (options[:ssl] ? RECAPTCHA_API_SECURE_SERVER : RECAPTCHA_API_SERVER)
0
+ xhtml = Builder::XmlMarkup.new(:target => out=(''), :indent => 2) # Because I can.
0
xhtml.script(:type => "text/javascript"){ xhtml.text! "var RecaptchaOptions = #{options[:display].to_json};\n"}
0
xhtml.div(:id => 'dynamic_recaptcha') {}
0
xhtml.script(:type => "text/javascript", :src => "#{uri}/js/recaptcha_ajax.js") {}
0
@@ -39,24 +44,29 @@ module Ambethia
0
-
raise ReCaptchaError, "No public key specified." unless key0
# Your private API key must be specified in the environment variable +RECAPTCHA_PRIVATE_KEY+
0
- def verify_recaptcha(model = nil
)
0
+ def verify_recaptcha(model = nil
, options = {})
0
return true if SKIP_VERIFY_ENV.include? ENV['RAILS_ENV']
0
- raise ReCaptchaError, "No private key specified." unless ENV['RECAPTCHA_PRIVATE_KEY']
0
+ key = (options[:private_key] || Ambethia::Recaptcha.private_key)
0
+ raise ReCaptchaError, "No private key specified." unless key
0
- recaptcha = Net::HTTP.post_form URI.parse("http://#{RECAPTCHA_VERIFY_SERVER}/verify"), {
0
- :privatekey => ENV['RECAPTCHA_PRIVATE_KEY'],
0
+ logger.info "Calling reCAPTCHA: #{RECAPTCHA_VERIFY_SERVER}"
0
+ recaptcha = Net::HTTP.post_form(URI.parse(RECAPTCHA_VERIFY_SERVER), {
0
:remoteip => request.remote_ip,
0
:challenge => params[:recaptcha_challenge_field],
0
:response => params[:recaptcha_response_field]
0
answer, error = recaptcha.body.split.map { |s| s.chomp }
0
+ logger.info "reCAPTCHA returned: #{answer.inspect}, #{error.inspect}"
0
unless answer == 'true'
0
session[:recaptcha_error] = error
Comments
No one has commented yet.