diff options
author | Joe Gregorio <jcgregorio@google.com> | 2011-06-22 16:55:52 -0400 |
---|---|---|
committer | Joe Gregorio <jcgregorio@google.com> | 2011-06-22 16:55:52 -0400 |
commit | 03d9910cc44e33ae7a325189b0f9d4d6f16e4875 (patch) | |
tree | 8d8fbb06c251bd448f0590681d79248922de5bdc | |
parent | 2149bbfe16b9fc813ad4f32bc582aaa50e5fa58f (diff) | |
download | httplib2-03d9910cc44e33ae7a325189b0f9d4d6f16e4875.tar.gz |
Added (optional) opaque support to DigestAuth
Reviewed in http://codereview.appspot.com/4661044/
-rw-r--r-- | python2/httplib2/__init__.py | 2 | ||||
-rwxr-xr-x | python2/httplib2test.py | 15 | ||||
-rw-r--r-- | python3/httplib2/__init__.py | 2 | ||||
-rwxr-xr-x | python3/httplib2test.py | 15 |
4 files changed, 34 insertions, 0 deletions
diff --git a/python2/httplib2/__init__.py b/python2/httplib2/__init__.py index f894ee2..f210130 100644 --- a/python2/httplib2/__init__.py +++ b/python2/httplib2/__init__.py @@ -530,6 +530,8 @@ class DigestAuthentication(Authentication): self.challenge['nc'], self.challenge['cnonce'], ) + if self.challenge.get('opaque'): + headers['authorization'] += ', opaque="%s"' % self.challenge['opaque'] self.challenge['nc'] += 1 def response(self, response, content): diff --git a/python2/httplib2test.py b/python2/httplib2test.py index 1efcd3c..bb9a32c 100755 --- a/python2/httplib2test.py +++ b/python2/httplib2test.py @@ -1470,6 +1470,21 @@ class HttpPrivateTest(unittest.TestCase): working_request = 'authorization: Digest username="joe", realm="myrealm", nonce="Ygk86AsKBAA=3516200d37f9a3230352fde99977bd6d472d4306", uri="/projects/httplib2/test/digest/", algorithm=MD5, response="97ed129401f7cdc60e5db58a80f3ea8b", qop=auth, nc=00000001, cnonce="33033375ec278a46"' self.assertEqual(our_request, working_request) + def testDigestObjectWithOpaque(self): + credentials = ('joe', 'password') + host = None + request_uri = '/projects/httplib2/test/digest/' + headers = {} + response = { + 'www-authenticate': 'Digest realm="myrealm", nonce="Ygk86AsKBAA=3516200d37f9a3230352fde99977bd6d472d4306", algorithm=MD5, qop="auth", opaque="atestopaque"' + } + content = "" + + d = httplib2.DigestAuthentication(credentials, host, request_uri, headers, response, content, None) + d.request("GET", request_uri, headers, content, cnonce="33033375ec278a46") + our_request = "authorization: %s" % headers['authorization'] + working_request = 'authorization: Digest username="joe", realm="myrealm", nonce="Ygk86AsKBAA=3516200d37f9a3230352fde99977bd6d472d4306", uri="/projects/httplib2/test/digest/", algorithm=MD5, response="97ed129401f7cdc60e5db58a80f3ea8b", qop=auth, nc=00000001, cnonce="33033375ec278a46", opaque="atestopaque"' + self.assertEqual(our_request, working_request) def testDigestObjectStale(self): credentials = ('joe', 'password') diff --git a/python3/httplib2/__init__.py b/python3/httplib2/__init__.py index 4f60a3a..c73b4e6 100644 --- a/python3/httplib2/__init__.py +++ b/python3/httplib2/__init__.py @@ -512,6 +512,8 @@ class DigestAuthentication(Authentication): self.challenge['nc'], self.challenge['cnonce'], ) + if self.challenge.get('opaque'): + headers['authorization'] += ', opaque="%s"' % self.challenge['opaque'] self.challenge['nc'] += 1 def response(self, response, content): diff --git a/python3/httplib2test.py b/python3/httplib2test.py index 870275f..7a1b8fe 100755 --- a/python3/httplib2test.py +++ b/python3/httplib2test.py @@ -1423,6 +1423,21 @@ class HttpPrivateTest(unittest.TestCase): working_request = 'authorization: Digest username="joe", realm="myrealm", nonce="Ygk86AsKBAA=3516200d37f9a3230352fde99977bd6d472d4306", uri="/projects/httplib2/test/digest/", algorithm=MD5, response="97ed129401f7cdc60e5db58a80f3ea8b", qop=auth, nc=00000001, cnonce="33033375ec278a46"'
self.assertEqual(our_request, working_request)
+ def testDigestObjectWithOpaque(self):
+ credentials = ('joe', 'password')
+ host = None
+ request_uri = '/projects/httplib2/test/digest/'
+ headers = {}
+ response = {
+ 'www-authenticate': 'Digest realm="myrealm", nonce="Ygk86AsKBAA=3516200d37f9a3230352fde99977bd6d472d4306", algorithm=MD5, qop="auth", opaque="atestopaque"'
+ }
+ content = ""
+
+ d = httplib2.DigestAuthentication(credentials, host, request_uri, headers, response, content, None)
+ d.request("GET", request_uri, headers, content, cnonce="33033375ec278a46")
+ our_request = "authorization: %s" % headers['authorization']
+ working_request = 'authorization: Digest username="joe", realm="myrealm", nonce="Ygk86AsKBAA=3516200d37f9a3230352fde99977bd6d472d4306", uri="/projects/httplib2/test/digest/", algorithm=MD5, response="97ed129401f7cdc60e5db58a80f3ea8b", qop=auth, nc=00000001, cnonce="33033375ec278a46", opaque="atestopaque"'
+ self.assertEqual(our_request, working_request)
def testDigestObjectStale(self):
credentials = ('joe', 'password')
|