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
def _unset(name): """ :returns: process status :rtype: int """ config.unset(name) return 0
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
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
def _unset(name): """ :returns: process status :rtype: int """ msg = config.unset(name) emitter.publish(DefaultError(msg)) return 0