class RingCaptcha::RingCaptcha

Attributes

secure[RW]

Public Class Methods

new(app_key, secret_key) click to toggle source
# File lib/ringcaptcha.rb, line 36
def initialize(app_key, secret_key)
  @app_key = app_key
  @secret_key = secret_key
  @retry_attempts = 0
  @secure = true
  @status = -1
end

Public Instance Methods

is_valid?(pin_code, token) click to toggle source
# File lib/ringcaptcha.rb, line 62
def is_valid?(pin_code, token)
  validate_pin_code(pin_code, token)
  @status == true
end
validate_pin_code(pin_code, token) click to toggle source
# File lib/ringcaptcha.rb, line 44
def validate_pin_code(pin_code, token)
  #TODO Check parameters
  data = {:secret_key => @secret_key, :token => token, :code => pin_code}
  sanitize_data(data)
  server = (@secure ? "https://" : "http://") + @@rc_server
  resource = "#{@app_key}/verify"
  begin
    response = verify_rest_call(server, resource, data)
    body = JSON.parse(response.body)
    @status = response.class.name == "Net::HTTPOK" ? body['status'] == "SUCCESS" : 0
  rescue => e
    @status = 0
    @message = e.message
  end

  return RingCaptchaVerification.new(body)
end

Private Instance Methods

sanitize_data(data) click to toggle source
# File lib/ringcaptcha.rb, line 69
def sanitize_data(data)
  data.each do |key,value|
    data[key] = URI::encode(value).strip
  end
end
verify_rest_call(server, resource, data, port=80) click to toggle source
# File lib/ringcaptcha.rb, line 75
def verify_rest_call(server, resource, data, port=80)
  port = @secure ? 443 : port
  url = "#{server}:#{port}/#{resource}"

  uri = URI.parse(url)
  https = Net::HTTP.new(uri.host,uri.port)
  https.use_ssl = @secure
  req = Net::HTTP::Post.new(uri.path, initheader = {'User-Agent' => @@user_agent})
  req.set_form_data(data)
  res = https.request(req)

  case res
  when Net::HTTPSuccess, Net::HTTPRedirection
    res
  else
    raise RingCaptchaRequestError, 'ERROR_PROCESING_REQUEST'
  end

end