def test_auth_plugin_prompt_password_in_session(self, httpbin): self.start_session(httpbin) session_path = self.config_dir / 'test-session.json' class Plugin(AuthPlugin): auth_type = 'test-prompted' def get_auth(self, username=None, password=None): return basic_auth() plugin_manager.register(Plugin) r1 = http( '--session', str(session_path), httpbin + '/basic-auth/user/password', '--auth-type', Plugin.auth_type, '--auth', 'user:'******'--session', str(session_path), httpbin + '/basic-auth/user/password', ) assert HTTP_OK in r1 assert HTTP_OK in r2 plugin_manager.unregister(Plugin)
def test_auth_type_stored_in_session_file(self, httpbin): self.config_dir = mk_config_dir() self.session_path = self.config_dir / 'test-session.json' class Plugin(AuthPlugin): auth_type = 'test-saved' auth_require = True def get_auth(self, username=None, password=None): return basic_auth() plugin_manager.register(Plugin) http( '--session', str(self.session_path), httpbin + '/basic-auth/user/password', '--auth-type', Plugin.auth_type, '--auth', 'user:password', ) updated_session = json.loads(self.session_path.read_text()) assert updated_session['auth']['type'] == 'test-saved' assert updated_session['auth']['raw_auth'] == "user:password" plugin_manager.unregister(Plugin)
def test_auth_plugin_require_auth_false_and_auth_provided(httpbin): class Plugin(AuthPlugin): auth_type = 'test-require-false-yet-provided' auth_require = False def get_auth(self, username=None, password=None): assert self.raw_auth == USERNAME + SEPARATOR_CREDENTIALS + PASSWORD assert username == USERNAME assert password == PASSWORD return basic_auth() plugin_manager.register(Plugin) try: r = http( httpbin + BASIC_AUTH_URL, '--auth-type', Plugin.auth_type, '--auth', USERNAME + SEPARATOR_CREDENTIALS + PASSWORD, ) assert HTTP_OK in r assert r.json == AUTH_OK finally: plugin_manager.unregister(Plugin)
def test_auth_plugin_prompt_password_false(httpbin): class Plugin(AuthPlugin): auth_type = 'test-prompt-false' prompt_password = False def get_auth(self, username=None, password=None): assert self.raw_auth == USERNAME assert username == USERNAME assert password is None return basic_auth() plugin_manager.register(Plugin) try: r = http( httpbin + BASIC_AUTH_URL, '--auth-type', Plugin.auth_type, '--auth', USERNAME, ) assert HTTP_OK in r assert r.json == AUTH_OK finally: plugin_manager.unregister(Plugin)
def test_auth_plugin_parse_auth_false(httpbin): class Plugin(AuthPlugin): auth_type = 'test-parse-false' auth_parse = False def get_auth(self, username=None, password=None): assert username is None assert password is None assert self.raw_auth == BASIC_AUTH_HEADER_VALUE return basic_auth(self.raw_auth) plugin_manager.register(Plugin) try: r = http( httpbin + BASIC_AUTH_URL, '--auth-type', Plugin.auth_type, '--auth', BASIC_AUTH_HEADER_VALUE, ) assert HTTP_OK in r assert r.json == AUTH_OK finally: plugin_manager.unregister(Plugin)
def test_auth_type_reused_in_session(self, auth_require_param, auth_parse_param, httpbin): self.start_session(httpbin) session_path = self.config_dir / 'test-session.json' header = 'Custom dXNlcjpwYXNzd29yZA' class Plugin(AuthPlugin): auth_type = 'test-reused' auth_require = auth_require_param auth_parse = auth_parse_param def get_auth(self, username=None, password=None): return basic_auth(header=f'{header}==') plugin_manager.register(Plugin) r1 = http( '--session', str(session_path), httpbin + '/basic-auth/user/password', '--auth-type', Plugin.auth_type, '--auth', 'user:password', '--print=H', ) r2 = http( '--session', str(session_path), httpbin + '/basic-auth/user/password', '--print=H', ) assert f'Authorization: {header}' in r1 assert f'Authorization: {header}' in r2 plugin_manager.unregister(Plugin)
def test_pretty_options_with_and_without_stream_with_converter(pretty, stream): plugin_manager.register(SortJSONConverterPlugin) try: # Cover PluginManager.__repr__() assert 'SortJSONConverterPlugin' in str(plugin_manager) body = b'\x00{"foo":42,\n"bar":"baz"}' responses.add(responses.GET, DUMMY_URL, body=body, stream=True, content_type='json/bytes') args = ['--pretty=' + pretty, 'GET', DUMMY_URL] if stream: args.insert(0, '--stream') r = http(*args) assert 'json/bytes' in r if pretty == 'none': assert BINARY_SUPPRESSED_NOTICE.decode() in r else: # Ensure the plugin was effectively used and the resulting JSON is sorted assert '"bar": "baz",' in r assert '"foo": 42' in r finally: plugin_manager.unregister(SortJSONConverterPlugin)
def test_transport_from_requests_response(httpbin): plugin_manager.register(FakeTransportPlugin) try: r = http(f'{SCHEME}://example.com') assert HTTP_OK in r assert 'Hello' in r assert 'Content-Type: text/html; charset=UTF-8' in r finally: plugin_manager.unregister(FakeTransportPlugin)
def test_auth_plugin_prompt_password_in_session(self, httpbin): self.start_session(httpbin) session_path = self.config_dir / 'test-session.json' class Plugin(AuthPlugin): auth_type = 'test-prompted' def get_auth(self, username=None, password=None): basic_auth_header = 'Basic ' + b64encode( self.raw_auth.encode()).strip().decode('latin1') return basic_auth(basic_auth_header) plugin_manager.register(Plugin) with mock.patch('httpie.cli.argtypes.AuthCredentials._getpass', new=lambda self, prompt: 'password'): r1 = http( '--session', str(session_path), httpbin + '/basic-auth/user/password', '--auth-type', Plugin.auth_type, '--auth', 'user', ) r2 = http( '--session', str(session_path), httpbin + '/basic-auth/user/password', ) assert HTTP_OK in r1 assert HTTP_OK in r2 # additional test for issue: https://github.com/httpie/httpie/issues/1098 with open(session_path) as session_file: session_file_lines = ''.join(session_file.readlines()) assert "\"type\": \"test-prompted\"" in session_file_lines assert "\"raw_auth\": \"user:password\"" in session_file_lines plugin_manager.unregister(Plugin)