class Tinycert::Request

Attributes

params[R]

Public Class Methods

new(api_key, url, params) click to toggle source
# File lib/tinycert/request.rb, line 10
def initialize api_key, url, params
  @api_key = api_key
  @uri = URI(url)
  @params = prepare_params(params)

  # Create client
  @client = Net::HTTP.new(@uri.host, @uri.port)
  @client.use_ssl = true
  @client.verify_mode = OpenSSL::SSL::VERIFY_PEER
end

Public Instance Methods

build_request() click to toggle source

Create Request

# File lib/tinycert/request.rb, line 39
def build_request
  req = Net::HTTP::Post.new(@uri)
  req.add_field "Content-Type", "application/x-www-form-urlencoded; charset=utf-8"
  req.body = params_string_with_digest
  # puts @uri
  # puts req.body
  req
end
digest() click to toggle source
# File lib/tinycert/request.rb, line 30
def digest
  OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), @api_key, params_string)
end
params_string() click to toggle source
# File lib/tinycert/request.rb, line 34
def params_string
  URI.encode_www_form(@params)
end
params_string_with_digest() click to toggle source
# File lib/tinycert/request.rb, line 48
def params_string_with_digest
  params_string << "&digest=#{digest}"
end
prepare_params(p) click to toggle source

Sort the params consistently

# File lib/tinycert/request.rb, line 22
def prepare_params p
  results = {}
  # Build a new hash with string keys
  p.each { |k, v| results[k.to_s] = v }
  # Sort nested structures
  results.sort.to_h
end
response() click to toggle source

Fetch Request

# File lib/tinycert/request.rb, line 53
def response
  res = @client.request(build_request)
  raise Tinycert::Error.new(res) if res.code != '200'
  puts res.body
  res
end
results() click to toggle source
# File lib/tinycert/request.rb, line 60
def results
  results = JSON.parse(response.body)
  puts results
  results
end