diff --git a/radicale/__init__.py b/radicale/__init__.py index 21b6494..6bcbe71 100644 --- a/radicale/__init__.py +++ b/radicale/__init__.py @@ -39,11 +39,11 @@ import wsgiref.simple_server # pylint: disable=F0401 try: from http import client, server - from urllib.parse import unquote, urlparse + from urllib.parse import quote, unquote, urlparse except ImportError: import httplib as client import BaseHTTPServer as server - from urllib import unquote + from urllib import quote, unquote from urlparse import urlparse # pylint: enable=F0401 @@ -221,6 +221,14 @@ class Application(object): if calendars: status, headers, answer = function( environ, calendars, content, user) + elif user and self.acl.has_right(user, user, password): + # Check if the user/password couple matches, + # redirect user to his principal home in this case + location = "/%s/" % str(quote(user)) + log.LOGGER.info("redirecting to %s" % location) + status = client.FOUND + headers = {"Location": location} + answer = "Redirecting to %s" % location else: status = client.UNAUTHORIZED headers = { diff --git a/radicale/ical.py b/radicale/ical.py index 7c44743..9448750 100644 --- a/radicale/ical.py +++ b/radicale/ical.py @@ -171,7 +171,10 @@ class Calendar(object): """ self.encoding = "utf-8" split_path = path.split("/") - self.owner = split_path[0] if len(split_path) > 1 else None + if (principal and split_path) or len(split_path) > 1: + self.owner = split_path[0] + else: + self.owner = None self.path = os.path.join(FOLDER, path.replace("/", os.sep)) self.local_path = path if path != '.' else '' self.is_principal = principal