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
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
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
def setUp(self): super(DigestAuthenticatorTest, self).setUp() self.uuid4_m = self.mocker.replace("uuid.uuid4") self.auth = DigestAuthenticator("jiminy", "cricket")
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")
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")
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"]))