summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoe Gregorio <jcgregorio@google.com>2011-06-22 16:55:52 -0400
committerJoe Gregorio <jcgregorio@google.com>2011-06-22 16:55:52 -0400
commit03d9910cc44e33ae7a325189b0f9d4d6f16e4875 (patch)
tree8d8fbb06c251bd448f0590681d79248922de5bdc
parent2149bbfe16b9fc813ad4f32bc582aaa50e5fa58f (diff)
downloadhttplib2-03d9910cc44e33ae7a325189b0f9d4d6f16e4875.tar.gz
Added (optional) opaque support to DigestAuth
Reviewed in http://codereview.appspot.com/4661044/
-rw-r--r--python2/httplib2/__init__.py2
-rwxr-xr-xpython2/httplib2test.py15
-rw-r--r--python3/httplib2/__init__.py2
-rwxr-xr-xpython3/httplib2test.py15
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')