| """AuthDigestProvider scenarios.""" | |
| from . import digest_client as dc | |
| from .env import AAATestEnv | |
| class TestDigestProvider: | |
| def url(self, env, path): | |
| return env.mkurl("http", "aaa", path) | |
| def test_digest_050_omitted_provider_defaults_to_file(self, env): | |
| # /digest/noprovider/ has no AuthDigestProvider directive at all; | |
| # mod_auth_digest falls back to the "file" provider (mod_authn_file) | |
| # by default (see get_hash() / AUTHN_DEFAULT_PROVIDER in mod_auth.h). | |
| path = "/digest/noprovider/secret.txt" | |
| r = env.curl_get(self.url(env, path)) | |
| assert r.response["status"] == 401 | |
| challenge = dc.DigestChallenge.parse(r.response["header"]["www-authenticate"]) | |
| auth = dc.build_authorization( | |
| AAATestEnv.DIGEST_USER, challenge, AAATestEnv.DIGEST_PASSWORD, | |
| method="GET", uri=path) | |
| r = env.curl_get(self.url(env, path), options=["-H", f"Authorization: {auth}"]) | |
| assert r.response["status"] == 200 | |
| assert r.response["body"].decode() == "digest-noprovider-secret\n" | |
| def test_digest_051_unknown_provider_rejected_at_config_time(self, env): | |
| r = env.configtest([ | |
| 'AuthType Digest', | |
| f'AuthName "{AAATestEnv.REALM}"', | |
| 'AuthDigestProvider no-such-provider', | |
| f'AuthUserFile "{env.digest_pwfile}"', | |
| 'Require valid-user', | |
| ]) | |
| assert r.exit_code != 0 | |
| assert "Unknown Authn provider" in r.stderr |