\#\!/ usr/bin/env python
\# By: Kelcey Damage, 2012

import hashlib, hmac, string. base64, urllib

\# Reference GET/POST sample request
\#
\# 1. http://10.10.0.1:8080/client/api
\# 2. ?apiKey={API_KEY}
\# 3. &command={API_COMMAND}
\# 4. &response={JSON/XML}
\# 5. &zoneid={ZONE_ID}
\# 6. &signature={SIGNATURE}

\# Reference required signature elements
\#
\# 1. request
\# 2. apiKey
\# 3. private_key

api_url =

secret =

apiKey =

request =

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._creat_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).digest()

        self.signature = base64.b64encode(digest)

    def \_build_post_request(self):
        self.query \+= '&signature=' + urllib.quote_plus(self.signature)
        self.value = self.api_url + '?' + self.query

api = SignedAPICall(api_url, apiKey,, secret)
api.request(request)

print api.value