コード例 #1
0
    def validate_signature(self, parameters, signature=None, raise_error=False, url_end_point=None):
        if conf.DEFAULT_SIGNATURE_VERSION == "2":
            assert url_end_point, "The url_end_point is a required parameter for version 2 Signatures."
            # @TODO - the api call won't work since api.py imports base.py (circular import).  Need to resolve circular import or implement PKI method (ugh!).
            #client = api.ApiClient()
            #response = client.verify_signature(url_end_point, parameters)
            http_parameters = urllib.urlencode(parameters)
            assert type(http_parameters) in [str, unicode], "http_parameters must be a string"
            self.endpoint = SANDBOX_ENDPOINT if conf.RUN_IN_SANDBOX else ENDPOINT
            timestamp = time.strftime(TIME_FORMAT, time.gmtime())
            qs = util.query_string({
                'Action':'VerifySignature',
                'Timestamp':timestamp,
                'AWSAccessKeyId': self.access_key_id,
                'Version': AMAZON_FPS_API_VERSION,
                'UrlEndPoint': url_end_point,
                'HttpParameters': http_parameters,})
            url = self.endpoint+'/'+qs

            try:
                data = urllib2.urlopen(url).read()
                response = xml.VerifySignatureResponse(data)
            except urllib2.HTTPError, e:
                data = e.read()
                response = xml.Response(data)

            try:
                matches = response.verificationStatus == 'Success'
            except AttributeError:
                matches = False
            if not matches:
                LOGGER.error("Signature Verification failed.")
                if raise_error:
                    raise InvalidSignatureError("Invalid Signature.", "", parameters)
            return matches
コード例 #2
0
ファイル: authorization.py プロジェクト: pcardune/divvy.fps
    def get_query_string(self, parameters):
        """Return a query string for the given keyword arguments.

        This will include the correct calleryKey, version, and
        generated query signature needed by amazon.
        """
        parameters.setdefault('callerKey', self.access_key_id)
        parameters.setdefault('version', AMAZON_FPS_VERSION)
        parameters['awsSignature'] = util.get_signature(self.secret_key, parameters)
        return util.query_string(parameters)
コード例 #3
0
    def get_query_string(self, parameters):
        """Return a query string for the given keyword arguments.

        This will include the correct calleryKey, version, and
        generated query signature needed by amazon.
        """
        parameters.setdefault('AWSAccessKeyId', self.access_key_id)
        parameters.setdefault('Version', AMAZON_FPS_API_VERSION)
        parameters['SignatureVersion'] = '2'
        if parameters.get('SignatureVersion') == '2':
            parameters['SignatureMethod'] = 'HmacSHA256'
        parameters['Signature'] = util.get_signature(self.secret_key, parameters, self.endpoint)
        return util.query_string(parameters)
コード例 #4
0
    def verify_signature(self, url_end_point, http_parameters):
        assert type(http_parameters) in [str, unicode], "http_parameters must be a string"
        timestamp = time.strftime(TIME_FORMAT, time.gmtime())
        qs = util.query_string({
            'Action':'VerifySignature',
            'Timestamp':timestamp,
            'AWSAccessKeyId': self.access_key_id,
            'Version': AMAZON_FPS_API_VERSION,
            'UrlEndPoint': url_end_point,
            'HttpParameters': http_parameters,})
        url = self.endpoint+'/'+qs

        data, success = self.call(url)
        if success:
            response = xml.VerifySignatureResponse(data)
        else:
            response = xml.Response(data)
        return response
コード例 #5
0
ファイル: test_util.py プロジェクト: erikcw/divvy.fps
 def test_query_string(self):
     self.assertEquals(util.query_string(dict(foo="bar", one=1, two=None)),
                       '?foo=bar&one=1')