diff --git a/radicale/__init__.py b/radicale/__init__.py index c0d762b..a036b4e 100644 --- a/radicale/__init__.py +++ b/radicale/__init__.py @@ -264,9 +264,6 @@ class Application(object): path = environ["PATH_INFO"] - # Find collection(s) - items = ical.Collection.from_path(path, environ.get("HTTP_DEPTH", "0")) - # Get function corresponding to method function = getattr(self, environ["REQUEST_METHOD"].lower()) @@ -280,17 +277,21 @@ class Application(object): else: user = password = None - read_allowed_items, write_allowed_items = \ - self.collect_allowed_items(items, user) - is_authenticated = auth.is_authenticated(user, password) + is_valid_user = is_authenticated or not user - if ((read_allowed_items or write_allowed_items) - and (not user or is_authenticated)) or \ - (is_authenticated and function == self.propfind) or \ - function == self.options or not items: - # Collections found, or authenticated PROPFIND request, - # or OPTIONS request, or no items at all + if is_valid_user: + items = ical.Collection.from_path(path, + environ.get("HTTP_DEPTH", "0")) + read_allowed_items, write_allowed_items = \ + self.collect_allowed_items(items, user) + else: + read_allowed_items, write_allowed_items = None, None + + if is_valid_user and ( + (read_allowed_items or write_allowed_items) or + (is_authenticated and function == self.propfind) or + function == self.options): status, headers, answer = function( environ, read_allowed_items, write_allowed_items, content, user)