diff --git a/radicale/__init__.py b/radicale/__init__.py index 39402ba..de30c23 100644 --- a/radicale/__init__.py +++ b/radicale/__init__.py @@ -305,19 +305,14 @@ class Application: # Create principal collection if user and is_authenticated: principal_path = "/%s/" % user - if self.authorized(user, self.Collection(principal_path, True), - "w"): + collection = self.Collection(principal_path, True) + if self.authorized(user, collection, "w"): with self.Collection.acquire_lock("r"): - principal = next(self.Collection.discover(principal_path), - None) - if not principal or principal.path != principal_path.strip("/"): + principal = next( + self.Collection.discover(principal_path), None) + if not principal or principal.path != user: with self.Collection.acquire_lock("w"): - # the collection might exist by now - principal = next(self.Collection.discover( - principal_path), None) - if (not principal or - principal.path != principal_path.strip("/")): - self.Collection.create_collection(principal_path) + self.Collection.create_collection(principal_path) # Get content content_length = int(environ.get("CONTENT_LENGTH") or 0) diff --git a/radicale/storage.py b/radicale/storage.py index e43ebe5..129bf8b 100644 --- a/radicale/storage.py +++ b/radicale/storage.py @@ -407,11 +407,14 @@ class Collection(BaseCollection): folder = os.path.expanduser( cls.configuration.get("storage", "filesystem_folder")) path = path_to_filesystem(folder, href) - if not os.path.exists(path): + + self = cls(href) + if os.path.exists(path): + return self + else: os.makedirs(path) if not tag and collection: tag = collection[0].name - self = cls(href) if tag == "VCALENDAR": self.set_meta("tag", "VCALENDAR")