--- a/tests/httpserverauth.py Sat Oct 05 10:29:34 2019 -0400
+++ b/tests/httpserverauth.py Sun Oct 06 09:45:02 2019 -0400
@@ -4,9 +4,8 @@
import hashlib
from mercurial.hgweb import common
-from mercurial import (
- node,
-)
+from mercurial import node
+
def parse_keqv_list(req, l):
"""Parse list of key=value strings where keys are not duplicated."""
@@ -18,6 +17,7 @@
parsed[k] = v
return parsed
+
class digestauthserver(object):
def __init__(self):
self._user_hashes = {}
@@ -42,8 +42,10 @@
# We aren't testing the protocol here, just that the bytes make the
# proper round trip. So hardcoded seems fine.
nonce = b'064af982c5b571cea6450d8eda91c20d'
- return b'realm="%s", nonce="%s", algorithm=MD5, qop="auth"' % (realm,
- nonce)
+ return b'realm="%s", nonce="%s", algorithm=MD5, qop="auth"' % (
+ realm,
+ nonce,
+ )
def checkauth(self, req, header):
log = req.rawenv[b'wsgi.errors']
@@ -53,8 +55,9 @@
if resp.get(b'algorithm', b'MD5').upper() != b'MD5':
log.write(b'Unsupported algorithm: %s' % resp.get(b'algorithm'))
- raise common.ErrorResponse(common.HTTP_FORBIDDEN,
- b"unknown algorithm")
+ raise common.ErrorResponse(
+ common.HTTP_FORBIDDEN, b"unknown algorithm"
+ )
user = resp[b'username']
realm = resp[b'realm']
nonce = resp[b'nonce']
@@ -79,22 +82,29 @@
respdig = kd(ha1, noncebit)
if respdig != resp[b'response']:
- log.write(b'User/realm "%s/%s" gave %s, but expected %s'
- % (user, realm, resp[b'response'], respdig))
+ log.write(
+ b'User/realm "%s/%s" gave %s, but expected %s'
+ % (user, realm, resp[b'response'], respdig)
+ )
return False
return True
+
digest = digestauthserver()
+
def perform_authentication(hgweb, req, op):
auth = req.headers.get(b'Authorization')
if req.headers.get(b'X-HgTest-AuthType') == b'Digest':
if not auth:
challenge = digest.makechallenge(b'mercurial')
- raise common.ErrorResponse(common.HTTP_UNAUTHORIZED, b'who',
- [(b'WWW-Authenticate', b'Digest %s' % challenge)])
+ raise common.ErrorResponse(
+ common.HTTP_UNAUTHORIZED,
+ b'who',
+ [(b'WWW-Authenticate', b'Digest %s' % challenge)],
+ )
if not digest.checkauth(req, auth[7:]):
raise common.ErrorResponse(common.HTTP_FORBIDDEN, b'no')
@@ -102,12 +112,16 @@
return
if not auth:
- raise common.ErrorResponse(common.HTTP_UNAUTHORIZED, b'who',
- [(b'WWW-Authenticate', b'Basic Realm="mercurial"')])
+ raise common.ErrorResponse(
+ common.HTTP_UNAUTHORIZED,
+ b'who',
+ [(b'WWW-Authenticate', b'Basic Realm="mercurial"')],
+ )
if base64.b64decode(auth.split()[1]).split(b':', 1) != [b'user', b'pass']:
raise common.ErrorResponse(common.HTTP_FORBIDDEN, b'no')
+
def extsetup(ui):
common.permhooks.insert(0, perform_authentication)
digest.adduser(b'user', b'pass', b'mercurial')