コード例 #1
0
    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"])
コード例 #2
0
 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)
コード例 #3
0
 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"])
コード例 #4
0
 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"])
コード例 #5
0
 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)
コード例 #6
0
 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)
コード例 #7
0
 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)
コード例 #8
0
    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"])
コード例 #9
0
    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)
コード例 #10
0
 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
             })
コード例 #11
0
    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"))
コード例 #12
0
    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)
コード例 #13
0
    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"))
コード例 #14
0
 def test_build_fetch_arguments_overwrite(self):
     fetch_arguments = build_fetch_arguments("/foo", body="whatever")
     self.assertEqual("whatever", fetch_arguments.body)
コード例 #15
0
 def test_build_fetch_arguments_overwrite(self):
     fetch_arguments = build_fetch_arguments("/foo", body="whatever")
     self.assertEqual("whatever", fetch_arguments.body)