Example #1
0
    def _test_signed_request(self):
        from faws.sign.v4 import (
            signed_request,
            SignedRequestInfo,
            )
        from faws.service import get_service
        from faws.sign.v4 import DATETIME_F
        from faws.creds import Creds
        
        # GET request
        method = 'GET'
        url = 'https://iam.amazonaws.com/'
        action = 'ListUsers'
        params = {
            'Version' : '2010-05-08',
            }

        expected = SignedRequestInfo(
            headers = {
                'content-type': 'application/json',
                'host' : 'iam.amazonaws.com',
                },
            url = 'https://iam.amazonaws.com/?Action=ListUsers&Version=2010-05-08&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE/20110909/us-east-1/iam/aws4_request&X-Amz-Date=20110909T233600Z&X-Amz-Signature=525d1a96c69b5549dd78dbbec8efe264102288b83ba87b7d58d4b76b71f59fd2&X-Amz-SignedHeaders=content-type;host',
            data = None,
            )
        creds = Creds('AKIDEXAMPLE', 'wJalrXUtnFEMI/K7MDENG+bPxRfiCYEXAMPLEKEY', 'us-east-1')
        when = datetime.datetime.strptime('20110909T233600Z', DATETIME_F)
        actual = signed_request(method, get_service('iam', None), action, params, creds, when)
        self.assertSequenceEqual(sorted(expected.headers.keys()), sorted(actual.headers.keys()))
        for key in sorted(expected.headers.keys()):
            self.assertSequenceEqual(expected.headers[key], actual.headers[key], key)
        self.assertSequenceEqual(expected.url, actual.url)
        self.assertEqual(expected.data, actual.data)
Example #2
0
 def callf(self, action, params=None, service_name='ec2', now=None):
     from faws.futures import Future
     import requests
     import datetime
     from faws.service import get_service
     from faws.sign.v2 import signed_request
     if params is None:
         params = {}
     if now is None:
         now = datetime.datetime.utcnow()
     service = get_service(service_name, self.creds.region)
     expires = now + datetime.timedelta(days=5)
     params.update({
             'Action' : action,
             })
     assert service.method in {'GET', 'POST'}, service.name
     # do_request will be one of requests.get or requests.post
     if 'GET' == service.method:
         do_request = requests.get
     else:
         do_request = requests.put
     sr = signed_request(service, params, self.creds, now)
     def do_call():
         return do_request(
             sr.url,
             data = sr.payload,
             headers = sr.headers,
             )
     return Future(self.executor.submit(do_call))
Example #3
0
 def callf_v4(self, action, params=None, service_name='ec2', now=None):
     from faws.sign.common import DATETIME_ISO8601_F
     import requests
     import datetime
     from faws.service import get_service
     from faws.sign.v4 import (
         datefmt,
         signed_request,
         )
     if params is None:
         params = {}
     if now is None:
         now = datetime.datetime.now()
     service = get_service(service_name, self.creds.region)
     expires = now + datetime.timedelta(minutes=5)
     params.update({
             'Action' : action,
             'Version' : service.version,
             'AWSAccessKeyId' : self.creds.access_key,
             'Timestamp' : now.strftime(DATETIME_ISO8601_F),
             'Expires' : expires.strftime(DATETIME_ISO8601_F),
             })
     assert service.method in {'GET', 'POST'}, service.name
     # do_request will be one of requests.get or requests.post
     if 'GET' == service.method:
         do_request = requests.get
     else:
         do_request = requests.put
     sr = signed_request(service, params, self.creds, when=now)
     def do_call():
         return do_request(
             sr.url,
             data = sr.payload,
             headers = sr.headers,
             )
     return self.executor.submit(do_call)