Skip to content

Instantly share code, notes, and snippets.

@imduffy15
Created August 28, 2013 16:54
Show Gist options
  • Select an option

  • Save imduffy15/6368364 to your computer and use it in GitHub Desktop.

Select an option

Save imduffy15/6368364 to your computer and use it in GitHub Desktop.
#!/ usr/bin/env python
# By: Kelcey Damage, 2012 & Kraig Amador, 2012
api_url = 'http://ianduffy.ie:8080/client/api'
apiKey = 'ZoTQxJc2XDUGQ6Id4va5MVQA-IUvvmsNnOE0wx5e1dU5ZCPOWdx4olk_RRvoXrovOc8EzK0UEEI48BeJKmZe4w'
secret = 'k8a69yCteAQKX2lWV4EKBk4VPXv9irFoAqoLS1SsNf9dg0PDtClYdBfxZk_awGrg5s82W1WoY7ZW2r04WVJXmw'
import hashlib, hmac, string, base64, urllib
import json, urllib
class SignedAPICall(object):
def __init__(self, api_url, apiKey, secret):
self.api_url = api_url
self.apiKey = apiKey
self.secret = secret
def request(self, args):
args['apiKey'] = self.apiKey
self.params = []
self._sort_request(args)
self._create_signature()
self._build_post_request()
def _sort_request(self, args):
keys = sorted(args.keys())
for key in keys:
self.params.append(key + '=' + urllib.quote_plus(args[key]))
def _create_signature(self):
self.query = '&'.join(self.params)
digest = hmac.new(
self.secret,
msg=self.query.lower(),
digestmod=hashlib.sha1)
self.signature = base64.b64encode(digest.digest())
def _build_post_request(self):
self.query += '&signature=' + urllib.quote_plus(self.signature)
self.value = self.api_url + '?' + self.query
class CloudStack(SignedAPICall):
def __getattr__(self, name):
def handlerFunction(*args, **kwargs):
if kwargs:
return self._make_request(name, kwargs)
return self._make_request(name, args[0])
return handlerFunction
def _http_get(self, url):
response = urllib.urlopen(url)
return response
def _make_request(self, command, args):
args['response'] = 'json'
args['command'] = command
self.request(args)
http_request = self._http_get(self.value)
return http_request
#Usage
api = CloudStack(api_url, apiKey, secret)
request = {};
result = api.listCapabilities(request)
print result.getcode()
print result.read()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment