blob: 829d923552f532157adb672bec4ddfd0059a3441 [file]
"""AuthDigestDomain: presence, format, and inheritance of the domain=
attribute in the WWW-Authenticate challenge.
"""
from . import digest_client as dc
from .env import AAATestEnv
class TestDigestDomain:
def url(self, env, path):
return env.mkurl("http", "aaa", path)
def test_digest_040_domain_attribute_present(self, env):
r = env.curl_get(self.url(env, "/digest/domain/secret.txt"))
assert r.response["status"] == 401
challenge = dc.DigestChallenge.parse(r.response["header"]["www-authenticate"])
# set_uri_list() (mod_auth_digest.c) builds a single quoted,
# space-separated list from the configured AuthDigestDomain URIs.
assert challenge.domain == "/digest/domain/ https://mirror.example.org/other/"
assert challenge.domain_list() == [
"/digest/domain/", "https://mirror.example.org/other/"]
def test_digest_041_no_domain_configured_omits_attribute(self, env):
r = env.curl_get(self.url(env, "/digest/default/secret.txt"))
assert r.response["status"] == 401
challenge = dc.DigestChallenge.parse(r.response["header"]["www-authenticate"])
assert challenge.domain is None
def test_digest_042_domain_location_still_authenticates(self, env):
r = env.curl_get(self.url(env, "/digest/domain/secret.txt"))
challenge = dc.DigestChallenge.parse(r.response["header"]["www-authenticate"])
auth = dc.build_authorization(
AAATestEnv.DIGEST_USER, challenge, AAATestEnv.DIGEST_PASSWORD,
method="GET", uri="/digest/domain/secret.txt")
r = env.curl_get(self.url(env, "/digest/domain/secret.txt"),
options=["-H", f"Authorization: {auth}"])
assert r.response["status"] == 200
assert r.response["body"].decode() == "digest-domain-secret\n"
def test_digest_043_domain_inherited_by_nested_path(self, env):
# AuthDigestDomain is set on /digest/domain/; a path nested below it
# inherits the same directory config (same realm/credentials/domain).
r = env.curl_get(self.url(env, "/digest/domain/nested/secret.txt"))
assert r.response["status"] == 401
challenge = dc.DigestChallenge.parse(r.response["header"]["www-authenticate"])
assert challenge.realm == AAATestEnv.REALM
assert challenge.domain == "/digest/domain/ https://mirror.example.org/other/"
auth = dc.build_authorization(
AAATestEnv.DIGEST_USER, challenge, AAATestEnv.DIGEST_PASSWORD,
method="GET", uri="/digest/domain/nested/secret.txt")
r = env.curl_get(self.url(env, "/digest/domain/nested/secret.txt"),
options=["-H", f"Authorization: {auth}"])
assert r.response["status"] == 200
assert r.response["body"].decode() == "digest-domain-nested-secret\n"