From 81b04890f1157922005aa1d4139bfab9a7d3a5df Mon Sep 17 00:00:00 2001 From: Unrud Date: Mon, 1 Aug 2016 20:51:27 +0200 Subject: [PATCH] Create principal collection automatically --- radicale/__init__.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/radicale/__init__.py b/radicale/__init__.py index 9331821f..bc28e62f 100644 --- a/radicale/__init__.py +++ b/radicale/__init__.py @@ -302,6 +302,23 @@ class Application: is_authenticated = self.is_authenticated(user, password) is_valid_user = is_authenticated or not user + # Create principal collection + if user and is_authenticated: + principal_path = "/%s/" % user + if self.authorized(user, self.Collection(principal_path, True), + "w"): + with self.Collection.acquire_lock("r"): + principal = next(self.Collection.discover(principal_path), + None) + if not principal or principal.path != principal_path.strip("/"): + 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) + # Get content content_length = int(environ.get("CONTENT_LENGTH") or 0) if content_length: