def test_header_credentials(self): fetch_arguments = build_fetch_arguments("/foo") credentials = HeaderCredentials({"X-Auth-Token": "foobar"}) credentials(fetch_arguments) self.assertEqual("foobar", fetch_arguments.headers["X-Auth-Token"])
def test_build_fetch_arguments_default(self): fetch_arguments = build_fetch_arguments("/foo") self.assertEqual("/foo", fetch_arguments.path) self.assertEqual({}, fetch_arguments.headers) self.assertEqual(None, fetch_arguments.body) self.assertEqual(None, fetch_arguments.auth_mode) self.assertEqual(None, fetch_arguments.auth_username) self.assertEqual(None, fetch_arguments.auth_password)
def test_header_credentials_existing_headers(self): fetch_arguments = build_fetch_arguments( "/foo", headers={"X-Auth-Token": "whatever"}) credentials = HeaderCredentials({ "X-Auth-Token": "foobar", }) credentials(fetch_arguments) self.assertEqual("whatever", fetch_arguments.headers["X-Auth-Token"])
def test_cookie_credentials_plaintext(self): fetch_arguments = build_fetch_arguments("/foobar") credentials = CookieCredentials("auth", "token") credentials(fetch_arguments) cookie = SimpleCookie() cookie.load(fetch_arguments.headers["Cookie"]) self.assertTrue("auth" in cookie) self.assertEqual("token", cookie["auth"].value)
def test_header_credentials(self): fetch_arguments = build_fetch_arguments("/foo") credentials = HeaderCredentials({ "X-Auth-Token": "foobar" }) credentials(fetch_arguments) self.assertEqual("foobar", fetch_arguments.headers["X-Auth-Token"])
def authenticated_fetch( self, path, method=None, headers=None, body=None, auth_username=None, auth_password=None, auth_mode=None, **kwargs ): headers = headers or {} # fetch arguments is the explicit list of overwritable arguments # for fetch() calls. For instance, 'method' isn't overwritable, # because that would be very bizarre if you could change the method # of a test fetch() call just based on the credentials... # TODO: change URL to query for query arguments instead... fetch_arguments = build_fetch_arguments( path=path, headers=headers, body=body, auth_mode=auth_mode, auth_username=auth_username, auth_password=auth_password, ) if not hasattr(self, "get_credentials"): raise NotImplementedError( "Method 'get_credentials' must be implemented in order to " "use 'authenticated_fetch'." ) update_credentials = self.get_credentials() update_credentials(fetch_arguments) arguments = {"path": fetch_arguments.path} if method: arguments["method"] = method if fetch_arguments.body: arguments["body"] = fetch_arguments.body if fetch_arguments.headers: arguments["headers"] = fetch_arguments.headers if fetch_arguments.auth_mode: arguments["auth_mode"] = fetch_arguments.auth_mode if fetch_arguments.auth_password: arguments["auth_password"] = fetch_arguments.auth_password if fetch_arguments.auth_username: arguments["auth_username"] = fetch_arguments.auth_username return self.fetch(**arguments)
def use_credentials(self, credentials): fetch_arguments = build_fetch_arguments("/") credentials(fetch_arguments) # Selenium doesn't support arbitrary headers (afaik), so we only # support cookies for now. if "Cookie" in fetch_arguments.headers: cookie = Cookie.SimpleCookie() cookie.load(fetch_arguments.headers["Cookie"]) for morsel_name, morsel in cookie.items(): self._driver.add_cookie({ "name": morsel_name, "value": morsel.value })
def test_cookie_credentials(self): fetch_arguments = build_fetch_arguments("/foobar") credentials = CookieCredentials( cookie_name="auth", cookie_value="token", cookie_secret="foobar") credentials(fetch_arguments) self.assertTrue("Cookie" in fetch_arguments.headers) cookie = SimpleCookie() cookie.load(fetch_arguments.headers["Cookie"]) self.assertTrue("auth" in cookie) cookie_value = cookie["auth"].value expected_value = decode_signed_value("foobar", "auth", cookie_value) self.assertEqual("token", expected_value.decode("utf-8"))
def authenticated_fetch(self, path, method=None, headers=None, body=None, auth_username=None, auth_password=None, auth_mode=None, **kwargs): headers = headers or {} # fetch arguments is the explicit list of overwritable arguments # for fetch() calls. For instance, 'method' isn't overwritable, # because that would be very bizarre if you could change the method # of a test fetch() call just based on the credentials... # TODO: change URL to query for query arguments instead... fetch_arguments = build_fetch_arguments(path=path, headers=headers, body=body, auth_mode=auth_mode, auth_username=auth_username, auth_password=auth_password) if not hasattr(self, "get_credentials"): raise NotImplementedError( "Method 'get_credentials' must be implemented in order to " "use 'authenticated_fetch'.") update_credentials = self.get_credentials() update_credentials(fetch_arguments) arguments = {"path": fetch_arguments.path} if method: arguments["method"] = method if fetch_arguments.body: arguments["body"] = fetch_arguments.body if fetch_arguments.headers: arguments["headers"] = fetch_arguments.headers if fetch_arguments.auth_mode: arguments["auth_mode"] = fetch_arguments.auth_mode if fetch_arguments.auth_password: arguments["auth_password"] = fetch_arguments.auth_password if fetch_arguments.auth_username: arguments["auth_username"] = fetch_arguments.auth_username return self.fetch(**arguments)
def test_cookie_credentials(self): fetch_arguments = build_fetch_arguments("/foobar") credentials = CookieCredentials(cookie_name="auth", cookie_value="token", cookie_secret="foobar") credentials(fetch_arguments) self.assertTrue("Cookie" in fetch_arguments.headers) cookie = SimpleCookie() cookie.load(fetch_arguments.headers["Cookie"]) self.assertTrue("auth" in cookie) cookie_value = cookie["auth"].value expected_value = decode_signed_value("foobar", "auth", cookie_value) self.assertEqual("token", expected_value.decode("utf-8"))
def test_build_fetch_arguments_overwrite(self): fetch_arguments = build_fetch_arguments("/foo", body="whatever") self.assertEqual("whatever", fetch_arguments.body)