diff --git a/radicale/__init__.py b/radicale/__init__.py index faab049..8e76d82 100644 --- a/radicale/__init__.py +++ b/radicale/__init__.py @@ -67,6 +67,8 @@ REQUEST_ENTITY_TOO_LARGE = (client.REQUEST_ENTITY_TOO_LARGE, "Request body too large.") REMOTE_DESTINATION = (client.BAD_GATEWAY, {"Content-type": "text/plain"}, "Remote destination not supported.") +DIRECTORY_LISTING = (client.FORBIDDEN, {"Content-type": "text/plain"}, + "Directory listings are not supported.") DAV_HEADERS = "1, 2, 3, calendar-access, addressbook, extended-mkcol" @@ -451,6 +453,8 @@ class Application: return NOT_FOUND if isinstance(item, self.Collection): collection = item + if collection.get_meta("tag") not in ("VADDRESSBOOK", "VCALENDAR"): + return DIRECTORY_LISTING else: collection = item.collection content_type = xmlutils.MIMETYPES.get( diff --git a/radicale/tests/test_base.py b/radicale/tests/test_base.py index 048c464..8b367a2 100644 --- a/radicale/tests/test_base.py +++ b/radicale/tests/test_base.py @@ -736,8 +736,8 @@ class BaseRequestsMixIn: def test_principal_collection_creation(self): """Verify existence of the principal collection.""" status, headers, answer = self.request( - "GET", "/user/", REMOTE_USER="user") - assert status == 200 + "PROPFIND", "/user/", REMOTE_USER="user") + assert status == 207 def test_existence_of_root_collections(self): """Verify that the root collection always exists.""" @@ -762,8 +762,8 @@ class BaseRequestsMixIn: "created_by_hook")) status, headers, answer = self.request("MKCOL", "/calendar.ics/") assert status == 201 - status, headers, answer = self.request("GET", "/created_by_hook/") - assert status == 200 + status, headers, answer = self.request("PROPFIND", "/created_by_hook/") + assert status == 207 def test_hook_read_access(self): """Verify that hook is not run for read accesses.""" @@ -791,8 +791,8 @@ class BaseRequestsMixIn: "created_by_hook")) status, headers, answer = self.request("GET", "/", REMOTE_USER="user") assert status == 200 - status, headers, answer = self.request("GET", "/created_by_hook/") - assert status == 200 + status, headers, answer = self.request("PROPFIND", "/created_by_hook/") + assert status == 207 def test_hook_fail(self): """Verify that a request fails if the hook fails."""