Class: Level3Api

Inherits:
Object
  • Object
show all
Defined in:
lib/level3-api.rb

Overview

–TODO use nokogiri w/ xsi?

Instance Method Summary collapse

Constructor Details

#initialize(key_id, secret) ⇒ Level3Api

key_id = Level 3 API Key secret = Level 3 API Secret



13
14
15
16
17
18
19
20
# File 'lib/level3-api.rb', line 13

def initialize(key_id,secret)
  @api_url_base = "https://ws.level3.com"
  @key_id = key_id # required
  @secret = secret # required
  raise 'No key_id' unless @key_id
  raise 'No secret' unless @secret
  @content_type = 'text/xml'
end

Instance Method Details

#_from_xml(xml) ⇒ Object

Attempt to mash XML into a parseable ruby structure



42
43
44
45
46
47
48
49
50
51
52
# File 'lib/level3-api.rb', line 42

def _from_xml(xml)
  return XmlSimple.xml_in(xml, {
    'ForceArray'=>['accessGroup'],
    'GroupTags'=>{
      'services'=>'service',
      'metros'=>'metro',
      'networkIdentifiers'=>'ni'
    },
    'KeyAttr'=>['id','name']
  })
end

#formatted_dateObject



26
27
28
# File 'lib/level3-api.rb', line 26

def formatted_date
  return @current_date.gmtime.strftime("%a, %d %b %Y %H:%M:%S GMT") 
end

#generate_auth_string(service, resource, method) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/level3-api.rb', line 29

def generate_auth_string(service,resource,method)
  authstring = "%s\n%s%s\n%s\n%s\n" % [
    formatted_date,
    service.chomp('/'),
    resource.chomp('/'),
    @content_type,
    method
  ]
  hmac = HMAC::SHA1.new(@secret)
  hmac.update(authstring)
  return "MPA %s:%s" % [@key_id, Base64.encode64(hmac.digest)]
end

#request(service = "/accessGroups", resource = "/v1.0", method = "GET", params = {}) ⇒ Object



53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/level3-api.rb', line 53

def request(service="/accessGroups",resource="/v1.0",method="GET",params={})
  set_date
  authstr = generate_auth_string(service,resource,method)
  url = "#{@api_url_base}#{service}#{resource}"
  #puts "request: url=#{url}"
  xml = RestClient.get url,
    :content_type => @content_type,
    :authorization => authstr,
    :date => formatted_date,
    :verify_ssl => OpenSSL::SSL::VERIFY_PEER,
    :params => params
  return _from_xml(xml)
end

#set_dateObject

Time is only considered valid for authentication for 15 minutes on level3… We reset it once each pass just to make sure it does not expire



23
24
25
# File 'lib/level3-api.rb', line 23

def set_date
  @current_date = Time.now
end