async def test_client_user_agent(monkeypatch):
    req_exec = RequestExecutor(
        {
            "client": {
                "orgUrl": "https://test.okta.com",
                "authorizationMode": 'SSWS',
                "token": 'token',
                "userAgent": '',
                "rateLimit": {
                    "maxRetries": 2
                }
            }
        }, NoOpCache(), None)

    assert 'User-Agent' in req_exec._http_client._default_headers
    assert req_exec._http_client._default_headers["User-Agent"] == UserAgent(
    ).get_user_agent_string()

    # mock and shoot request
    monkeypatch.setattr(HTTPClient, 'send_request',
                        mocks.mock_GET_HTTP_Client_response_valid)

    req, res_details, resp_body, error = await req_exec._http_client.\
        send_request({
            'method': 'GET',
            'url': ORG_URL + GET_USERS_CALL,
            'headers': {'Authorization': f"SSWS {API_TOKEN}"},
            'data': {}
        })
    assert error is None
    assert 'User-Agent' in req["headers"]
    assert req_exec._http_client._default_headers["User-Agent"] == \
        req["headers"]["User-Agent"]

    # with extra user agent string
    extra = "testing"
    req_exec = RequestExecutor(
        {
            "client": {
                "orgUrl": "https://test.okta.com",
                "authorizationMode": 'SSWS',
                "token": 'token',
                "userAgent": extra,
                "rateLimit": {
                    "maxRetries": 2
                }
            }
        }, NoOpCache(), None)
    assert 'User-Agent' in req_exec._http_client._default_headers
    assert req_exec._http_client._default_headers["User-Agent"] == \
        UserAgent(extra).get_user_agent_string()
Exemple #2
0
    def __init__(self, config, cache, http_client=None):
        """
        Constructor for Request Executor object for Okta Client

        Arguments:
            config {dict} -- This dictionary contains the configuration
                             of the Request Executor
        """
        # Raise Value Error if numerical inputs are invalid (< 0)
        self._request_timeout = config["client"].get('requestTimeout', 0)
        if self._request_timeout < 0:
            raise ValueError(
                ("okta.client.requestTimeout provided as "
                 f"{self._request_timeout} but must be 0 (disabled) or "
                 "greater than zero"))
        self._max_retries = config["client"]["rateLimit"].get('maxRetries', 2)
        if self._max_retries < 0:
            raise ValueError(
                ("okta.client.rateLimit.maxRetries provided as "
                 f"{self._max_retries} but must be 0 (disabled) or "
                 "greater than zero"))
        # Setup other fields
        self._authorization_mode = config["client"]["authorizationMode"]
        self._base_url = config["client"]["orgUrl"]
        self._config = config
        self._cache = cache
        self._default_headers = {
            'User-Agent':
            UserAgent(config["client"].get("userAgent",
                                           None)).get_user_agent_string(),
            'Accept':
            "application/json"
        }

        # SSWS header
        if config["client"]["authorizationMode"] == "SSWS":
            self._default_headers['Authorization'] = (
                "SSWS "
                f"{self._config['client']['token']}")
        else:
            # OAuth
            self._oauth = OAuth(self, self._config)

        http_client_impl = http_client or HTTPClient
        self._http_client = http_client_impl({
            'requestTimeout':
            self._request_timeout,
            'headers':
            self._default_headers,
            'proxy':
            self._config["client"]["proxy"]
            if "proxy" in self._config["client"] else None
        })
        HTTPClient.raise_exception = \
            self._config['client'].get("raiseException", False)
        self._custom_headers = {}
Exemple #3
0
async def mock_GET_HTTP_request(*args, **kwargs):
    return {
        "headers": {
            "User-Agent": UserAgent().get_user_agent_string(),
            "Authorization": f"SSWS {API_TOKEN}",
            # etc
        },
        "url": ORG_URL + GET_USERS_CALL,
        "data": {},
        "method": "GET"
    }