Test current-user-principal prop authentication workaround

This commit is contained in:
Unrud 2020-05-24 13:19:29 +02:00
parent 6ec63ccc9b
commit b9bb017edf
2 changed files with 15 additions and 2 deletions

View File

@ -56,7 +56,7 @@ def xml_propfind(base_prefix, path, xml_request, allowed_items, user,
if xmlutils.make_clark("D:current-user-principal") in props and not user: if xmlutils.make_clark("D:current-user-principal") in props and not user:
# Ask for authentication # Ask for authentication
# Returning the DAV:unauthenticated pseudo-principal as specified in # Returning the DAV:unauthenticated pseudo-principal as specified in
# RFC 5397 doesn't seem to work with DAVdroid. # RFC 5397 doesn't seem to work with DAVx5.
return client.FORBIDDEN, None return client.FORBIDDEN, None
# Writing answer # Writing answer
@ -372,6 +372,6 @@ class ApplicationPropfindMixin:
status, xml_answer = xml_propfind( status, xml_answer = xml_propfind(
base_prefix, path, xml_content, allowed_items, user, base_prefix, path, xml_content, allowed_items, user,
self._encoding) self._encoding)
if status == client.FORBIDDEN: if status == client.FORBIDDEN and xml_answer is None:
return httputils.NOT_ALLOWED return httputils.NOT_ALLOWED
return status, headers, self._write_xml_content(xml_answer) return status, headers, self._write_xml_content(xml_answer)

View File

@ -1303,6 +1303,19 @@ class BaseRequestsMixIn:
"""Verify existence of the principal collection.""" """Verify existence of the principal collection."""
self.propfind("/user/", login="user:") self.propfind("/user/", login="user:")
def test_authentication_current_user_principal_workaround(self):
"""Test if server sends authentication request when accessing
current-user-principal prop (workaround for DAVx5)."""
status, headers, _ = self.request("PROPFIND", "/", """\
<?xml version="1.0" encoding="utf-8"?>
<propfind xmlns="DAV:">
<prop>
<current-user-principal />
</prop>
</propfind>""")
assert status in (401, 403)
assert headers.get("WWW-Authenticate")
def test_existence_of_root_collections(self): def test_existence_of_root_collections(self):
"""Verify that the root collection always exists.""" """Verify that the root collection always exists."""
# Use PROPFIND because GET returns message # Use PROPFIND because GET returns message