def get_normalized_parameters(self, params):
        if params is None:
            params = {}
        try:
            # exclude the signature if it exists
            del params['oauth_signature']
        except:
            pass
        key_values = []

        for key, values in params.iteritems():
            if isinstance(values, file):
                continue
            if isinstance(values, (int, long, float)):
                values = str(values)
            if isinstance(values, (list, tuple)):
                values = [str(v) for v in values]
            if isinstance(values, basestring):
                values = [values]
            if USE_DOUBLE_ESCAPE_HACK and not key.startswith("ouath"):
                key = escape(key)
            for v in values:
                v = v.encode("utf-8")
                key = key.encode("utf-8")
                if USE_DOUBLE_ESCAPE_HACK and not key.startswith("oauth"):
                    # this is a dirty hack to make the
                    # thing work with the current server-side
                    # implementation. Or is it by spec?
                    v = escape(v)
                key_values.append(escape("%s=%s" % (key, v)))
        # sort lexicographically, first after key, then after value
        key_values.sort()
        # combine key value pairs in string
        return escape('&').join(key_values)
    def build_signature(self, request, parameters, consumer_secret,
                        token_secret, oauth_parameters):
        if logger.level == logging.DEBUG:
            logger.debug("request: %r", request)
            logger.debug("parameters: %r", parameters)
            logger.debug("consumer_secret: %r", consumer_secret)
            logger.debug("token_secret: %r", token_secret)
            logger.debug("oauth_parameters: %r", oauth_parameters)

        temp = {}
        temp.update(oauth_parameters)
        for p in self.FORBIDDEN:
            if p in temp:
                del temp[p]
        if parameters is not None:
            temp.update(parameters)
        sig = (
            escape(self.get_normalized_http_method(request)),
            escape(self.get_normalized_http_url(request)),
            self.get_normalized_parameters(
                temp),  # these are escaped in the method already
        )

        key = '%s&' % consumer_secret
        if token_secret is not None:
            key += token_secret
        raw = '&'.join(sig)
        logger.debug("raw basestring: %s", raw)
        logger.debug("key: %s", key)
        # hmac object
        hashed = hmac.new(key, raw, hashlib.sha1)
        # calculate the digest base 64
        signature = escape(base64.b64encode(hashed.digest()))
        return signature
 def get_normalized_parameters(self, params):
     if params is None:
         params = {}
     try:
         # exclude the signature if it exists
         del params['oauth_signature']
     except:
         pass
     key_values = []
     
     for key, values in params.iteritems():
         if isinstance(values, file):
             continue
         if isinstance(values, (int, long, float)):
             values = str(values)
         if isinstance(values, (list, tuple)):
             values = [str(v) for v in values]
         if isinstance(values, basestring):
             values = [values]
         if USE_DOUBLE_ESCAPE_HACK and not key.startswith("ouath"):
             key = escape(key)                
         for v in values:
             v = v.encode("utf-8")
             key = key.encode("utf-8")
             if USE_DOUBLE_ESCAPE_HACK and not key.startswith("oauth"):
                 # this is a dirty hack to make the
                 # thing work with the current server-side
                 # implementation. Or is it by spec? 
                 v = escape(v)
             key_values.append(escape("%s=%s" % (key, v)))
     # sort lexicographically, first after key, then after value
     key_values.sort()
     # combine key value pairs in string
     return escape('&').join(key_values)
    def build_signature(self, request, parameters, consumer_secret, token_secret, oauth_parameters):
        if logger.level == logging.DEBUG:
            logger.debug("request: %r", request)
            logger.debug("parameters: %r", parameters)
            logger.debug("consumer_secret: %r", consumer_secret)
            logger.debug("token_secret: %r", token_secret)
            logger.debug("oauth_parameters: %r", oauth_parameters)

            
        temp = {}
        temp.update(oauth_parameters)
        for p in self.FORBIDDEN:
            if p in temp:
                del temp[p]
        if parameters is not None:
            temp.update(parameters)
        sig = (
            escape(self.get_normalized_http_method(request)),
            escape(self.get_normalized_http_url(request)),
            self.get_normalized_parameters(temp), # these are escaped in the method already
        )
        
        key = '%s&' % consumer_secret
        if token_secret is not None:
            key += token_secret
        raw = '&'.join(sig)
        logger.debug("raw basestring: %s", raw)
        logger.debug("key: %s", key)
        # hmac object
        hashed = hmac.new(key, raw, hashlib.sha1)
        # calculate the digest base 64
        signature = escape(base64.b64encode(hashed.digest()))
        return signature
Exemple #5
0
    def fetch_access_token(self, oauth_request):
        # via headers
        # -> OAuthToken
        
        # This should proably be elsewhere but stays here for now
        oauth_request.set_parameter("oauth_signature", util.escape(oauth_request.get_parameter("oauth_signature")))
        self.connection.request(oauth_request.http_method, self.access_token_url, headers=oauth_request.to_header()) 
        response = self.connection.getresponse()
        resp = response.read()
        print "*" * 90
        print "response:", resp
        print "*" * 90

        return oauth.OAuthToken.from_string(resp)
Exemple #6
0
    def fetch_access_token(self, oauth_request):
        # via headers
        # -> OAuthToken
        
        # This should proably be elsewhere but stays here for now
        oauth_request.set_parameter("oauth_signature", util.escape(oauth_request.get_parameter("oauth_signature")))
        self.connection.request(oauth_request.http_method, self.access_token_url, headers=oauth_request.to_header()) 
        response = self.connection.getresponse()
        resp = response.read()
        print "*" * 90
        print "response:", resp
        print "*" * 90

        return oauth.OAuthToken.from_string(resp)
Exemple #7
0
    def _create_query_string(self, queryparams):
        """
        Small helpermethod to create the querystring from a dict.

        @type queryparams: None|dict<str, basestring|list<basestring>>
        @param queryparams: the queryparameters.
        @return: either the empty string, or a "?" followed by the parameters joined by "&"
        @rtype: str
        """
        if not queryparams:
            return ""
        h = []
        for key, values in queryparams.iteritems():
            if isinstance(values, (int, long, float)):
                values = str(values)
            if isinstance(values, basestring):
                values = [values]
            for v in values:
                v = v.encode("utf-8")
                h.append("%s=%s" % (key, escape(v)))
        return "?" + "&".join(h)
    def _create_query_string(self, queryparams):
        """
        Small helpermethod to create the querystring from a dict.

        @type queryparams: None|dict<str, basestring|list<basestring>>
        @param queryparams: the queryparameters.
        @return: either the empty string, or a "?" followed by the parameters joined by "&"
        @rtype: str
        """
        if not queryparams:
            return ""
        h = []
        for key, values in queryparams.iteritems():
            if isinstance(values, (int, long, float)):
                values = str(values)
            if isinstance(values, basestring):
                values = [values]
            for v in values:
                v = v.encode("utf-8")
                h.append("%s=%s" % (key, escape(v)))
        return "?" + "&".join(h)