class MagnetAPIClient

Public Class Methods

new(endpointURI , calk, secretKey = nil) click to toggle source
# File lib/magnetapiclient.rb, line 16
def initialize(endpointURI , calk, secretKey = nil)
  @endpointURI = endpointURI
  @calk = calk
  @secretKey  = secretKey
end

Public Instance Methods

callwebmethod(method_name, request, request_method) click to toggle source
# File lib/magnetapiclient.rb, line 22
def callwebmethod(method_name, request, request_method)
  _request = request
  if has_calk(_request) == false
    _request['calk'] = @calk
  end
  _signed_querystring = get_signed_querystring(method_name, _request, request_method)

  if request_method.downcase == 'post'
    uri = URI(""<<@endpointURI<<"/"<<method_name)
    params = CGI::parse(_signed_querystring)

    req = Net::HTTP::Post.new(uri)

    req.set_form_data( params)

    res = Net::HTTP.start(uri.hostname, uri.port, :use_ssl => uri.scheme == 'https') do |http|
      http.request(req)
      end
      case res
      when Net::HTTPSuccess, Net::HTTPRedirection
        return   res.body
      else
          res.value
      end
  else
       res = open(""<<@endpointURI<<"/"<<method_name<<"?"<<_signed_querystring).read
       
      return  res
  end
end
encode_rfc3986(s) click to toggle source
# File lib/magnetapiclient.rb, line 100
def encode_rfc3986(s)

  s = ERB::Util.url_encode(s).gsub("%7E", "~")
  return s
end
get_signed_querystring(method_name, request, request_method) click to toggle source
# File lib/magnetapiclient.rb, line 53
def get_signed_querystring(method_name, request, request_method)
  _request = request
  _request["timestamp"] = get_time_stamp()
  _sortedRequest = ksort(_request)
  _canonicalized_query = ""

  if  ( _sortedRequest.length > 0)
    for k in _sortedRequest
        _canonicalized_query << encode_rfc3986(k[0])
        _canonicalized_query << "="
        _canonicalized_query << encode_rfc3986(k[1])
        _canonicalized_query << "&"
    end
    _canonicalized_query = _canonicalized_query[0..-2]
  end
  _string_to_sign = ""
  _string_to_sign<<request_method.downcase<<"\n"<<@endpointURI.downcase<<"\n"<<method_name.downcase<<"\n"<<_canonicalized_query;
  #puts _string_to_sign
  _signed_query_string = _canonicalized_query

  if !@secretKey.nil?
    _signature = Base64.encode64(OpenSSL::HMAC.digest('sha256', @secretKey, _string_to_sign)).gsub(/\n/, "")
    _signature = encode_rfc3986(_signature)
    _signed_query_string += '&signature=' + _signature
  end
  #puts _signed_query_string
  return _signed_query_string
end
get_time_stamp() click to toggle source
# File lib/magnetapiclient.rb, line 87
def get_time_stamp()
  return Time.now.strftime("%Y-%m-%dT%H:%M:%SZ")
end
has_calk(request) click to toggle source
# File lib/magnetapiclient.rb, line 91
def has_calk(request)
  request.each do |key, value|
    if key.downcase == 'calk'
      return true
    end
  end
  return false
end
ksort(d) click to toggle source
# File lib/magnetapiclient.rb, line 82
def ksort(d)
  d = Hash[d.sort]
  return d
end