From 97e350341cab3bcbc28a10016331fcfefc11ef0d Mon Sep 17 00:00:00 2001 From: Peter Bieringer Date: Thu, 30 Apr 2026 22:32:58 +0200 Subject: [PATCH] sharing: fix get request on single items with bday conversion --- radicale/app/get.py | 14 ++++++++++---- radicale/sharing/__init__.py | 3 +++ 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/radicale/app/get.py b/radicale/app/get.py index b1e46540..ac5309f6 100644 --- a/radicale/app/get.py +++ b/radicale/app/get.py @@ -121,7 +121,10 @@ class ApplicationPartGet(ApplicationBase): elif limited_access: return httputils.NOT_ALLOWED else: - content_type = xmlutils.OBJECT_MIMETYPES[item.name] + if share and share['Conversion'] == "bday": + content_type = xmlutils.MIMETYPES["VCALENDAR"] + else: + content_type = xmlutils.OBJECT_MIMETYPES[item.name] content_disposition = "" assert item.last_modified headers = { @@ -130,9 +133,12 @@ class ApplicationPartGet(ApplicationBase): "ETag": item.etag} if content_disposition: headers["Content-Disposition"] = content_disposition - if isinstance(item, storage.BaseCollection) and share and share['Conversion'] == "bday": - # convert VCF to ICS - answer = item.serialize(vcf_to_ics=True) + if share and share['Conversion'] == "bday": + if isinstance(item, storage.BaseCollection): + # convert VCF to ICS + answer = item.serialize(vcf_to_ics=True) + else: + answer = item.convert_vcf_to_ics().serialize() else: answer = item.serialize() return client.OK, headers, answer, None diff --git a/radicale/sharing/__init__.py b/radicale/sharing/__init__.py index ba2c5f6b..109b292d 100644 --- a/radicale/sharing/__init__.py +++ b/radicale/sharing/__init__.py @@ -497,6 +497,9 @@ class BaseSharing: logger.info("sharing/%s: resolved path %r->%r, user %r->%r not enabled by user", "map", path, result['PathMapped'], user, result['Owner']) return {'error': 'map-not-enabled'} + if result['Conversion'] == "bday" and result['PathMapped'].endswith(".ics"): + result['PathMapped'] = result['PathMapped'].removesuffix(".ics") + ".vcf" + logger.info("sharing/%s: resolved path %r->%r, user %r->%r, Permissions=%r Conversion=%r", "map", path, result['PathMapped'], user, result['Owner'], result['Permissions'], result['Conversion']) return result