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 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 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)
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)