예제 #1
0
def _request_with_auth(response,
                       method,
                       url,
                       is_success=_default_is_success,
                       timeout=None,
                       verify=None,
                       **kwargs):
    """Try request (3 times) with credentials if 401 returned from server

    :param response: requests.response
    :type response: requests.Response
    :param method: method for the new Request object
    :type method: str
    :param url: URL for the new Request object
    :type url: str
    :param is_success: Defines successful status codes for the request
    :type is_success: Function from int to bool
    :param timeout: request timeout
    :type timeout: int
    :param verify: whether to verify SSL certs or path to cert(s)
    :type verify: bool | str
    :param kwargs: Additional arguments to requests.request
        (see http://docs.python-requests.org/en/latest/api/#requests.request)
    :type kwargs: dict
    :rtype: requests.Response
    """

    i = 0
    while i < 3 and response.status_code == 401:
        parsed_url = urlparse(url)
        hostname = parsed_url.hostname
        auth_scheme, realm = get_auth_scheme(response)
        creds = (hostname, auth_scheme, realm)

        with lock:
            if creds not in AUTH_CREDS:
                auth = _get_http_auth(response, parsed_url, auth_scheme)
            else:
                auth = AUTH_CREDS[creds]

        # try request again, with auth
        response = _request(method, url, is_success, timeout, auth,
                            verify, **kwargs)

        # only store credentials if they're valid
        with lock:
            if creds not in AUTH_CREDS and response.status_code == 200:
                AUTH_CREDS[creds] = auth
            # acs invalid token
            elif response.status_code == 401 and auth_scheme == "acsjwt":
                if util.get_config().get("core.dcos_acs_token") is not None:
                    config.unset("core.dcos_acs_token")

        i += 1

    if response.status_code == 401:
        raise DCOSAuthenticationException(response)

    return response
예제 #2
0
def _request_with_auth(response,
                       method,
                       url,
                       is_success=_default_is_success,
                       timeout=None,
                       verify=None,
                       **kwargs):
    """Try request (3 times) with credentials if 401 returned from server

    :param response: requests.response
    :type response: requests.Response
    :param method: method for the new Request object
    :type method: str
    :param url: URL for the new Request object
    :type url: str
    :param is_success: Defines successful status codes for the request
    :type is_success: Function from int to bool
    :param timeout: request timeout
    :type timeout: int
    :param verify: whether to verify SSL certs or path to cert(s)
    :type verify: bool | str
    :param kwargs: Additional arguments to requests.request
        (see http://docs.python-requests.org/en/latest/api/#requests.request)
    :type kwargs: dict
    :rtype: requests.Response
    """

    i = 0
    while i < 3 and response.status_code == 401:
        parsed_url = urlparse(url)
        hostname = parsed_url.hostname
        auth_scheme, realm = get_auth_scheme(response)
        creds = (hostname, auth_scheme, realm)

        with lock:
            if creds not in AUTH_CREDS:
                auth = _get_http_auth(response, parsed_url, auth_scheme)
            else:
                auth = AUTH_CREDS[creds]

        # try request again, with auth
        response = _request(method, url, is_success, timeout, auth,
                            verify, **kwargs)

        # only store credentials if they're valid
        with lock:
            if creds not in AUTH_CREDS and response.status_code == 200:
                AUTH_CREDS[creds] = auth
            # acs invalid token
            elif response.status_code == 401 and auth_scheme == "acsjwt":
                if util.get_config().get("core.dcos_acs_token") is not None:
                    config.unset("core.dcos_acs_token")

        i += 1

    if response.status_code == 401:
        raise DCOSAuthenticationException(response)

    return response
예제 #3
0
파일: main.py 프로젝트: vsinha/dcos-cli
def _unset(name):
    """
    :returns: process status
    :rtype: int
    """

    config.unset(name)
    return 0
예제 #4
0
파일: main.py 프로젝트: abridgett/dcos-cli
def _unset(name):
    """
    :returns: process status
    :rtype: int
    """

    config.unset(name)
    return 0
예제 #5
0
파일: main.py 프로젝트: keshavdv/dcos-cli
def _logout():
    """
    Logout the user from dcos acs auth or oauth

    :returns: process status
    :rtype: int
    """

    if config.get_config_val("core.dcos_acs_token") is not None:
        config.unset("core.dcos_acs_token")
    return 0
예제 #6
0
def test_cli_require_dcos_uri():
    runner = CliRunner()
    result = runner.invoke(cli.main.cli)
    # with preconfigured dcos cli dcos url isn't required
    assert '--dcos-url is a required option' not in result.output
    # oddly results -1
    assert result.exit_code == -1

    with dcos_config():
        config.unset('core.dcos_url')
        result = runner.invoke(cli.main.cli)
        assert '--dcos-url is a required option' in result.output
        assert result.exit_code == 1
예제 #7
0
파일: main.py 프로젝트: sschneid/dcos-cli
def _unset(name):
    """
    :returns: process status
    :rtype: int
    """

    msg = config.unset(name)
    emitter.publish(DefaultError(msg))

    return 0
예제 #8
0
def _unset(name):
    """
    :returns: process status
    :rtype: int
    """

    msg = config.unset(name)
    emitter.publish(DefaultError(msg))

    return 0