Moved the _get_req_auth function into the test client class, and renamed it to __make_authorization.

This commit is contained in:
依瑪貓 2022-11-24 07:16:36 +11:00
parent ca22b9731c
commit 515098c32a

View File

@ -49,54 +49,55 @@ class Client(WerkzeugClient):
return response return response
if hasattr(g, "_login_user"): if hasattr(g, "_login_user"):
delattr(g, "_login_user") delattr(g, "_login_user")
auth_data: Authorization = _get_req_auth( auth_data: Authorization = self.__class__.__make_authorization(
www_authenticate, args[0], digest_auth[0], digest_auth[1]) www_authenticate, args[0], digest_auth[0], digest_auth[1])
response = super(Client, self).open(*args, auth=auth_data, **kwargs) response = super(Client, self).open(*args, auth=auth_data, **kwargs)
return response return response
@staticmethod
def __make_authorization(www_authenticate: WWWAuthenticate, uri: str,
username: str, password: str) -> Authorization:
"""Composes and returns the request authorization.
def _get_req_auth(www_authenticate: WWWAuthenticate, uri: str, :param www_authenticate: The WWW-Authenticate response.
username: str, password: str) -> Authorization: :param uri: The request URI.
"""Returns the request authorization from the response header. :param username: The username.
:param password: The password.
:return: The request authorization.
"""
qop: t.Optional[t.Literal["auth", "auth-int"]] = None
if www_authenticate.qop is not None:
if "auth" in www_authenticate.qop:
qop = "auth"
:param www_authenticate: The WWW-Authenticate response. cnonce: t.Optional[str] = None
:param uri: The request URI. if qop is not None or www_authenticate.algorithm == "MD5-sess":
:param username: The username. cnonce = token_urlsafe(8)
:param password: The password. nc: t.Optional[str] = None
:return: The request authorization. count: int = 1
""" if qop is not None:
qop: t.Optional[t.Literal["auth", "auth-int"]] = None nc: str = hex(count)[2:].zfill(8)
if www_authenticate.qop is not None:
if "auth" in www_authenticate.qop:
qop = "auth"
cnonce: t.Optional[str] = None expected: str = calc_response(
if qop is not None or www_authenticate.algorithm == "MD5-sess": method="GET", uri=uri,
cnonce = token_urlsafe(8) password_hash=make_password_hash(www_authenticate.realm,
nc: t.Optional[str] = None username, password),
count: int = 1 nonce=www_authenticate.nonce, qop=qop,
if qop is not None: algorithm=www_authenticate.algorithm, cnonce=cnonce, nc=nc,
nc: str = hex(count)[2:].zfill(8) body=None)
expected: str = calc_response( data: t.Dict[str, str] = {
method="GET", uri=uri, "username": username, "realm": www_authenticate.realm,
password_hash=make_password_hash(www_authenticate.realm, "nonce": www_authenticate.nonce, "uri": uri, "response": expected}
username, password), if www_authenticate.algorithm is not None:
nonce=www_authenticate.nonce, qop=qop, data["algorithm"] = www_authenticate.algorithm
algorithm=www_authenticate.algorithm, cnonce=cnonce, nc=nc, body=None) if cnonce is not None:
data["cnonce"] = cnonce
if www_authenticate.opaque is not None:
data["opaque"] = www_authenticate.opaque
if qop is not None:
data["qop"] = qop
if nc is not None:
data["nc"] = nc
data: t.Dict[str, str] = { return Authorization("digest", data=data)
"username": username, "realm": www_authenticate.realm,
"nonce": www_authenticate.nonce, "uri": uri, "response": expected}
if www_authenticate.algorithm is not None:
data["algorithm"] = www_authenticate.algorithm
if cnonce is not None:
data["cnonce"] = cnonce
if www_authenticate.opaque is not None:
data["opaque"] = www_authenticate.opaque
if qop is not None:
data["qop"] = qop
if nc is not None:
data["nc"] = nc
return Authorization("digest", data=data)