def __init__(self, client_credentials, temporary_credentials_request_uri, token_credentials_request_uri, resource_owner_authorization_uri, resource_owner_authentication_uri=None, use_authorization_header=True, authorization_header_param_delimiter=","): """ Creates an instance of an OAuth 1.0 client. """ self._client_credentials = client_credentials self._temporary_credentials_request_uri = \ oauth_url_sanitize(temporary_credentials_request_uri, force_secure=True) self._resource_owner_authorization_uri = \ oauth_url_sanitize(resource_owner_authorization_uri, force_secure=False) self._token_credentials_request_uri = \ oauth_url_sanitize(token_credentials_request_uri, force_secure=True) if resource_owner_authentication_uri: self._resource_owner_authentication_uri = \ oauth_url_sanitize(resource_owner_authentication_uri, force_secure=False) else: self._resource_owner_authentication_uri = "" self._use_authorization_header = use_authorization_header self._authorization_header_param_delimiter = authorization_header_param_delimiter
def test_sanitization_force_secure(self): insecure_url = "http://www.EXAMPLE.com/request" secure_url = "https://www.EXAMPLE.com/request" assert_raises(InsecureOAuthUrlError, oauth_url_sanitize, insecure_url) assert_raises(InsecureOAuthUrlError, oauth_url_sanitize, insecure_url, True) assert_equal(oauth_url_sanitize(insecure_url, force_secure=False), "http://www.example.com/request") assert_equal(oauth_url_sanitize(secure_url, force_secure=False), "https://www.example.com/request") assert_equal(oauth_url_sanitize(secure_url, force_secure=True), "https://www.example.com/request")
def test_sanitization_force_secure(self): insecure_url = b("http://www.EXAMPLE.com/request") secure_url = b("https://www.EXAMPLE.com/request") self.assertRaises(InsecureOAuthUrlError, oauth_url_sanitize, insecure_url) self.assertRaises(InsecureOAuthUrlError, oauth_url_sanitize, insecure_url, True) self.assertEqual( oauth_url_sanitize(insecure_url, force_secure=False), b("http://www.example.com/request")) self.assertEqual( oauth_url_sanitize(secure_url, force_secure=False), b("https://www.example.com/request")) self.assertEqual( oauth_url_sanitize(secure_url, force_secure=True), b("https://www.example.com/request"))
def test_sanitization_force_secure_default_and_removes_fragment(self): url = "https://www.EXAMPLE.com/request?a2=r%20b&a3=2%20q&a3=a&b5=%3D%253D&c%40=&c2=&oauth_consumer_key=9djdj82h48djs9d2&oauth_nonce=7d8f3e4a&oauth_signature_method=HMAC-SHA1&oauth_timestamp=137131201&oauth_token=kkk9d7dh3k39sjv7#fragment" expected_params = { "a2": ["r b"], "b5": ["=%3D"], "a3": ["a", "2 q"], "c@": [""], "c2": [""], } expected_result = "https://www.example.com/request?" + urlencode_s(expected_params) # Fragment ignored. assert_equal(oauth_url_sanitize(url), expected_result)
def __init__(self, http_client, client_credentials, temporary_credentials_uri, token_credentials_uri, authorization_uri, authentication_uri=None, use_authorization_header=True, strict=True): super(Client, self).__init__(client_credentials, http_client, use_authorization_header) self._temporary_credentials_uri = \ oauth_url_sanitize(temporary_credentials_uri) self._token_credentials_uri = \ oauth_url_sanitize(token_credentials_uri) self._authorization_uri = \ oauth_url_sanitize(authorization_uri, False) if authentication_uri: self._authentication_uri = \ oauth_url_sanitize(authentication_uri, False) else: self._authentication_uri = None self._strict = strict
def __init__(self, http_client, client_credentials, auth_uri, token_uri): self._http_client = http_client self._client_credentials = client_credentials self._auth_uri = oauth_url_sanitize(auth_uri) self._token_uri = oauth_url_sanitize(token_uri)
def _request(cls, client_credentials, method, url, params=None, body=None, headers=None, realm=None, use_authorization_header=True, auth_credentials=None, oauth_signature_method=SIGNATURE_METHOD_HMAC_SHA1, oauth_version=OAUTH_VERSION_1, **kwargs): """ Makes an OAuth request. :param client_credentials: Client credentials (consumer key and secret). :param method: HTTP method. :param url: Request URL :param params: Additional query/payload parameters. If a `body` argument to this function is specified, the parameters are appended to the URL query string. If a `body` is not specified and a method other than GET is used the parameters will be added to the entity body. :param body: Entity body string. :param headers: Request headers dictionary. :param realm: Authorization realm. :param use_authorization_header: ``True`` if we should; ``False`` otherwise. :param auth_credentials: OAuth token/temporary credentials (if available). :param oauth_signature_method: Signature method. :param kwargs: Additional parameters including those that may begin with ``oauth_``. :returns: HTTP response (:class:`pyoauth.http.ResponseAdapter`) if ``async_callback`` is not specified; otherwise, ``async_callback`` is called with the response as its argument. """ method = method.upper() body = body or SYMBOL_EMPTY_BYTES headers = headers or {} # Split all the oauth parameters and function parameters. extra_oauth_params, kwargs = \ partition_dict(lambda k, v: k.startswith(OAUTH_PARAM_PREFIX), kwargs) # Query/payload parameters must not contain OAuth-specific parameters. params = query_remove_oauth(params) if params else {} # The URL must not contain OAuth-specific parameters. url = oauth_url_sanitize(url, force_secure=False) # Temporary credentials requests don't have ``oauth_token``. if auth_credentials: oauth_token = auth_credentials.identifier oauth_token_secret = auth_credentials.shared_secret else: oauth_token = oauth_token_secret = None # Make OAuth-specific parameter dictionary. oauth_params = cls._generate_oauth_params( oauth_consumer_key=client_credentials.identifier, oauth_signature_method=oauth_signature_method, oauth_version=oauth_version, oauth_timestamp=cls.generate_timestamp(), oauth_nonce=cls.generate_nonce(), oauth_token=oauth_token, **extra_oauth_params ) # Sign the request. signature = cls._generate_signature(method, url, params, body, headers, client_credentials.shared_secret, oauth_token_secret, oauth_params) oauth_params[OAUTH_PARAM_SIGNATURE] = signature # Now build the request. return cls._build_request( method, url, params, body, headers, oauth_params, realm, use_authorization_header )