Esempio n. 1
0
    def test_authenticate_postdata_204(self):
        self.setup_mock()
        self.uuid4_m()
        self.mocker.result("focaccia")
        self.mocker.replay()

        url = self.get_url("blur")
        auth = DigestAuthenticator("quesadilla", "king")

        def check(response):
            self.assertTrue(
                response.startswith(
                    'Digest username="******", realm="p", nonce="q", uri="%s"'
                    % url))
            self.assertIn('qop="auth", nc="00000001", cnonce="focaccia"',
                          response)

        self.add_auth("blur",
                      "HURL",
                      "",
                      "Digest realm=p, nonce=q, qop=auth",
                      check,
                      expect_content="bbq",
                      status=204)
        d = get_page_auth(url, auth, method="HURL", postdata="bbq")
        d.addCallback(self.assertEquals, "")
        return d
Esempio n. 2
0
    def test_authenticate_postdata_201(self):
        self.setup_mock()
        self.uuid4_m()
        self.mocker.result("ciabatta")
        self.mocker.replay()

        url = self.get_url("blam")
        auth = DigestAuthenticator("pizza", "principessa")

        def check(response):
            self.assertTrue(
                response.startswith(
                    'Digest username="******", realm="a", nonce="b", uri="%s"' %
                    url))
            self.assertIn('qop="auth", nc="00000001", cnonce="ciabatta"',
                          response)

        self.add_auth("blam",
                      "FLING",
                      "tomato",
                      "Digest realm=a, nonce=b, qop=auth",
                      check,
                      expect_content="oven",
                      status=201)
        d = get_page_auth(url, auth, method="FLING", postdata="oven")
        d.addCallback(self.assertEquals, "tomato")
        return d
Esempio n. 3
0
    def test_authenticate(self):
        self.setup_mock()
        self.uuid4_m()
        self.mocker.result("baguette")
        self.mocker.replay()

        url = self.get_url("blip")
        auth = DigestAuthenticator("sandwich", "earl")

        def check(response):
            self.assertTrue(
                response.startswith(
                    'Digest username="******", realm="x", nonce="y", uri="%s"'
                    % url))
            self.assertIn('qop="auth", nc="00000001", cnonce="baguette"',
                          response)

        self.add_auth("blip", "PROD", "ham",
                      "Digest realm=x, nonce=y, qop=auth", check)
        d = get_page_auth(url, auth, method="PROD")
        d.addCallback(self.assertEquals, "ham")
        return d
Esempio n. 4
0
 def setUp(self):
     super(DigestAuthenticatorTest, self).setUp()
     self.uuid4_m = self.mocker.replace("uuid.uuid4")
     self.auth = DigestAuthenticator("jiminy", "cricket")
Esempio n. 5
0
class DigestAuthenticatorTest(TestCase):

    def setUp(self):
        super(DigestAuthenticatorTest, self).setUp()
        self.uuid4_m = self.mocker.replace("uuid.uuid4")
        self.auth = DigestAuthenticator("jiminy", "cricket")

    def challenge(self, method="Digest", **kwargs):
        kwargs.setdefault("qop", "auth")
        details = ", ".join("%s=%s" % item for item in kwargs.items())
        return ("%s realm=loathing, nonce=blah, %s" % (method, details))

    def default_response(self):
        return ('Digest username="******", realm="loathing", nonce="blah", '
                'uri="http://somewhe.re/", algorithm="MD5", '
                'response="8891952040a96ba62cce585972bd3360", qop="auth", '
                'nc="00000001", cnonce="twiddle"')

    def assert_response(self, challenge, response):
        self.assertEquals(
            self.auth.authenticate("METH", "http://somewhe.re/", challenge),
            response)

    def assert_error(self, challenge, err_type, err_message):
        error = self.assertRaises(
            err_type,
            self.auth.authenticate, "METH", "http://somewhe.re/", challenge)
        self.assertEquals(str(error), err_message)

    def assert_missing_key(self, challenge, key):
        self.mocker.replay()
        message = "Authentication request missing required key: %r" % key
        self.assert_error(challenge, ProviderError, message)

    def test_normal(self):
        self.uuid4_m()
        self.mocker.result("twiddle")
        self.mocker.replay()
        self.assert_response(self.challenge(), self.default_response())

    def test_nc_increments(self):
        self.uuid4_m()
        self.mocker.result("twiddle")
        self.uuid4_m()
        self.mocker.result("twaddle")
        self.mocker.replay()
        self.assert_response(self.challenge(), self.default_response())
        self.assert_response(
            self.challenge(),
            'Digest username="******", realm="loathing", nonce="blah", '
            'uri="http://somewhe.re/", algorithm="MD5", '
            'response="c12e9ec2e0569d896b2f26b91c0e74c3", qop="auth", '
            'nc="00000002", cnonce="twaddle"')

    def test_qop_choices(self):
        self.uuid4_m()
        self.mocker.result("twiddle")
        self.mocker.replay()
        self.assert_response(self.challenge(qop='"auth,auth-int"'),
                             self.default_response())

    def test_specify_algorithm(self):
        self.uuid4_m()
        self.mocker.result("twiddle")
        self.mocker.replay()
        self.assert_response(self.challenge(algorithm="MD5"),
                             self.default_response())

    def test_bad_method(self):
        self.mocker.replay()
        self.assert_error(self.challenge("Masticate"), ProviderError,
                          "Unknown authentication method: Masticate")

    def test_bad_algorithm(self):
        self.mocker.replay()
        self.assert_error(self.challenge(algorithm="ROT13"), ProviderError,
                          "Unsupported digest algorithm: ROT13")

    def test_bad_qop(self):
        self.mocker.replay()
        self.assert_error(self.challenge(qop="auth-int"), ProviderError,
                          "Unsupported quality-of-protection: auth-int")

    def test_missing_keys(self):
        self.assert_missing_key("Digest realm=x, nonce=y", "qop")
        self.assert_missing_key("Digest realm=x, qop=y", "nonce")
        self.assert_missing_key("Digest qop=x, nonce=y", "realm")
Esempio n. 6
0
 def setUp(self):
     super(DigestAuthenticatorTest, self).setUp()
     self.uuid4_m = self.mocker.replace("uuid.uuid4")
     self.auth = DigestAuthenticator("jiminy", "cricket")
Esempio n. 7
0
class DigestAuthenticatorTest(TestCase):
    def setUp(self):
        super(DigestAuthenticatorTest, self).setUp()
        self.uuid4_m = self.mocker.replace("uuid.uuid4")
        self.auth = DigestAuthenticator("jiminy", "cricket")

    def challenge(self, method="Digest", **kwargs):
        kwargs.setdefault("qop", "auth")
        details = ", ".join("%s=%s" % item for item in kwargs.items())
        return ("%s realm=loathing, nonce=blah, %s" % (method, details))

    def default_response(self):
        return ('Digest username="******", realm="loathing", nonce="blah", '
                'uri="http://somewhe.re/", algorithm="MD5", '
                'response="8891952040a96ba62cce585972bd3360", qop="auth", '
                'nc="00000001", cnonce="twiddle"')

    def assert_response(self, challenge, response):
        self.assertEquals(
            self.auth.authenticate("METH", "http://somewhe.re/", challenge),
            response)

    def assert_error(self, challenge, err_type, err_message):
        error = self.assertRaises(err_type, self.auth.authenticate, "METH",
                                  "http://somewhe.re/", challenge)
        self.assertEquals(str(error), err_message)

    def assert_missing_key(self, challenge, key):
        self.mocker.replay()
        message = "Authentication request missing required key: %r" % key
        self.assert_error(challenge, ProviderError, message)

    def test_normal(self):
        self.uuid4_m()
        self.mocker.result("twiddle")
        self.mocker.replay()
        self.assert_response(self.challenge(), self.default_response())

    def test_nc_increments(self):
        self.uuid4_m()
        self.mocker.result("twiddle")
        self.uuid4_m()
        self.mocker.result("twaddle")
        self.mocker.replay()
        self.assert_response(self.challenge(), self.default_response())
        self.assert_response(
            self.challenge(),
            'Digest username="******", realm="loathing", nonce="blah", '
            'uri="http://somewhe.re/", algorithm="MD5", '
            'response="c12e9ec2e0569d896b2f26b91c0e74c3", qop="auth", '
            'nc="00000002", cnonce="twaddle"')

    def test_qop_choices(self):
        self.uuid4_m()
        self.mocker.result("twiddle")
        self.mocker.replay()
        self.assert_response(self.challenge(qop='"auth,auth-int"'),
                             self.default_response())

    def test_specify_algorithm(self):
        self.uuid4_m()
        self.mocker.result("twiddle")
        self.mocker.replay()
        self.assert_response(self.challenge(algorithm="MD5"),
                             self.default_response())

    def test_bad_method(self):
        self.mocker.replay()
        self.assert_error(self.challenge("Masticate"), ProviderError,
                          "Unknown authentication method: Masticate")

    def test_bad_algorithm(self):
        self.mocker.replay()
        self.assert_error(self.challenge(algorithm="ROT13"), ProviderError,
                          "Unsupported digest algorithm: ROT13")

    def test_bad_qop(self):
        self.mocker.replay()
        self.assert_error(self.challenge(qop="auth-int"), ProviderError,
                          "Unsupported quality-of-protection: auth-int")

    def test_missing_keys(self):
        self.assert_missing_key("Digest realm=x, nonce=y", "qop")
        self.assert_missing_key("Digest realm=x, qop=y", "nonce")
        self.assert_missing_key("Digest qop=x, nonce=y", "realm")
Esempio n. 8
0
 def __init__(self, config):
     fallback_url = "http://%(orchestra-server)s/webdav" % config
     self._base_url = config.get("storage-url", fallback_url)
     self._auth = DigestAuthenticator(
         config.get("storage-user", config["orchestra-user"]),
         config.get("storage-pass", config["orchestra-pass"]))