Reviewed in http://codereview.appspot.com/4661044/
http://code.google.com/p/httplib2/source/detail?r=fb4aa0dd7fe3
Modified:
/python2/httplib2/__init__.py
/python2/httplib2test.py
/python3/httplib2/__init__.py
/python3/httplib2test.py
=======================================
--- /python2/httplib2/__init__.py Wed Jun 22 13:43:39 2011
+++ /python2/httplib2/__init__.py Wed Jun 22 13:55:52 2011
@@ -530,6 +530,8 @@
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):
=======================================
--- /python2/httplib2test.py Mon Jun 13 11:06:23 2011
+++ /python2/httplib2test.py Wed Jun 22 13:55:52 2011
@@ -1470,6 +1470,21 @@
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')
=======================================
--- /python3/httplib2/__init__.py Mon Jun 13 11:06:23 2011
+++ /python3/httplib2/__init__.py Wed Jun 22 13:55:52 2011
@@ -512,6 +512,8 @@
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):
=======================================
--- /python3/httplib2test.py Mon Jun 13 11:06:23 2011
+++ /python3/httplib2test.py Wed Jun 22 13:55:52 2011
@@ -1423,6 +1423,21 @@
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')