def browser_prompt_auth(dcos_url, provider_info): """ Get DC/OS Authentication token by browser prompt :param dcos_url: url to cluster :type dcos_url: str :param provider_info: info about provider to auth with :param provider_info: str :rtype: None """ start_flow_url = provider_info["config"]["start_flow_url"].lstrip('/') if not urlparse(start_flow_url).netloc: start_flow_url = dcos_url.rstrip('/') + start_flow_url dcos_token = _prompt_user_for_token(start_flow_url, "DC/OS Authentication Token") # verify token endpoint = '/pkgpanda/active.buildinfo.full.json' url = urllib.parse.urljoin(dcos_url, endpoint) response = http._request('HEAD', url, auth=http.DCOSAcsAuth(dcos_token)) if response.status_code in [200, 403]: config.set_val("core.dcos_acs_token", dcos_token) else: raise DCOSException("Authentication failed")
def test_request_with_bad_auth_acl(mock, req_mock, auth_mock): mock.url = 'http://domain.com' mock.headers = {'www-authenticate': 'acsjwt'} mock.status_code = 401 auth_mock.return_value = http.DCOSAcsAuth("token") req_mock.return_value = mock with pytest.raises(DCOSException) as e: http._request_with_auth(mock, "method", mock.url) assert e.exconly().split(':')[1].strip() == "Authentication failed"
def test_request_with_bad_oauth(mock, req_mock, auth_mock): mock.url = 'http://domain.com' mock.headers = {'www-authenticate': 'oauthjwt'} mock.status_code = 401 auth_mock.return_value = http.DCOSAcsAuth("token") req_mock.return_value = mock with pytest.raises(DCOSException) as e: http.request_with_auth("method", mock.url) msg = "Your core.dcos_acs_token is invalid. Please run: `dcos auth login`" assert e.exconly().split(':', 1)[1].strip() == msg
def test_request_with_auth_oauth(mock, req_mock, auth_mock): mock.url = 'http://domain.com' mock.headers = {'www-authenticate': 'oauthjwt'} mock.status_code = 401 auth = http.DCOSAcsAuth("token") auth_mock.return_value = auth mock2 = copy.deepcopy(mock) mock2.status_code = 200 req_mock.return_value = mock2 response = http.request_with_auth("method", mock.url) assert response.status_code == 200