From 233f796f1cc17a439fa696430cf7f4284efdf345 Mon Sep 17 00:00:00 2001 From: Adam Sampson Date: Tue, 9 Jul 2013 20:51:21 +0000 Subject: [PATCH] Add digest auth support. This works with curl and urllib2, at least. --- testserver.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/testserver.py b/testserver.py index 70bb001..7f3cc89 100644 --- a/testserver.py +++ b/testserver.py @@ -77,6 +77,27 @@ class HTTPRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler): return None self.path = m.group(3) + m = re.match(r'^/digest-([^/-]+)-([^/]+)(/.*)$', self.path) + if m: + # Require digest authentication. (Not a good implementation!) + realm = "rawdog test server" + nonce = "0123456789abcdef" + a1 = m.group(1) + ":" + realm + ":" + m.group(2) + a2 = "GET:" + self.path + def h(s): + return hashlib.md5(s).hexdigest() + response = h(h(a1) + ":" + nonce + ":" + h(a2)) + mr = re.search(r'response="([^"]*)"', + self.headers.get("Authorization", "")) + if mr is None or mr.group(1) != response: + self.send_response(401) + self.send_header("WWW-Authenticate", + 'Digest realm="%s", nonce="%s"' + % (realm, nonce)) + self.end_headers() + return None + self.path = m.group(3) + m = re.match(r'^/(\d\d\d)(/.*)?$', self.path) if m: # Request for a particular response code. -- 2.35.1