diff --git a/radicale/rights.py b/radicale/rights.py index 50ff3adb..c772c1ae 100644 --- a/radicale/rights.py +++ b/radicale/rights.py @@ -96,6 +96,10 @@ def authorized(user, collection, right): If the user is empty it checks for anonymous rights """ + collection_url = collection.url.rstrip("/") or "/" + if collection_url in (".well-known/carddav", ".well-known/caldav"): + return right == "r" rights_type = config.get("rights", "type").lower() - return rights_type == "none" or (_read_from_sections( - user or "", collection.url.rstrip("/") or "/", right)) + return ( + rights_type == "none" or + _read_from_sections(user or "", collection_url, right)) diff --git a/radicale/xmlutils.py b/radicale/xmlutils.py index 72c193c1..a0ecdad7 100644 --- a/radicale/xmlutils.py +++ b/radicale/xmlutils.py @@ -296,7 +296,10 @@ def _propfind_response(path, item, props, user): # pylint: enable=W0511 elif tag == _tag("D", "current-user-principal") and user: tag = ET.Element(_tag("D", "href")) - tag.text = _href("/%s/" % user) + if item.resource_type == "addressbook": + tag.text = _href("/%s/addressbook.vcf/" % user) + else: + tag.text = _href("/%s/calendar.ics/" % user) element.append(tag) elif tag == _tag("D", "current-user-privilege-set"): privilege = ET.Element(_tag("D", "privilege"))