Skip to content

Commit

Permalink
add option for global permit of delete of collection (default: True t…
Browse files Browse the repository at this point in the history
…o avoid breaking change)
  • Loading branch information
pbiering committed Mar 9, 2024
1 parent ab28d65 commit 08a4c79
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 8 deletions.
3 changes: 3 additions & 0 deletions config
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,9 @@
# File for rights management from_file
#file = /etc/radicale/rights

# Permit delete of a collection (global)
#permit_delete_collection = True


[storage]

Expand Down
3 changes: 3 additions & 0 deletions radicale/app/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ class Application(ApplicationPartDelete, ApplicationPartHead,
_max_content_length: int
_auth_realm: str
_extra_headers: Mapping[str, str]
_permit_delete_collection: bool

def __init__(self, configuration: config.Configuration) -> None:
"""Initialize Application.
Expand All @@ -84,6 +85,8 @@ def __init__(self, configuration: config.Configuration) -> None:
self._max_content_length = configuration.get(
"server", "max_content_length")
self._auth_realm = configuration.get("auth", "realm")
self._permit_delete_collection = configuration.get("rights", "permit_delete_collection")
logger.info("permit delete of collection: %s", self._permit_delete_collection)
self._extra_headers = dict()
for key in self.configuration.options("headers"):
self._extra_headers[key] = configuration.get("headers", key)
Expand Down
19 changes: 11 additions & 8 deletions radicale/app/delete.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,15 +70,18 @@ def do_DELETE(self, environ: types.WSGIEnviron, base_prefix: str,
return httputils.PRECONDITION_FAILED
hook_notification_item_list = []
if isinstance(item, storage.BaseCollection):
for i in item.get_all():
hook_notification_item_list.append(
HookNotificationItem(
HookNotificationItemTypes.DELETE,
access.path,
i.uid
if self._permit_delete_collection:
for i in item.get_all():
hook_notification_item_list.append(
HookNotificationItem(
HookNotificationItemTypes.DELETE,
access.path,
i.uid
)
)
)
xml_answer = xml_delete(base_prefix, path, item)
xml_answer = xml_delete(base_prefix, path, item)
else:
return httputils.NOT_ALLOWED
else:
assert item.collection is not None
assert item.href is not None
Expand Down
4 changes: 4 additions & 0 deletions radicale/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,10 @@ def _convert_to_bool(value: Any) -> bool:
"help": "rights backend",
"type": str_or_callable,
"internal": rights.INTERNAL_TYPES}),
("permit_delete_collection", {
"value": "True",
"help": "permit delete of a collection",
"type": bool}),
("file", {
"value": "/etc/radicale/rights",
"help": "file for rights management from_file",
Expand Down

0 comments on commit 08a4c79

Please sign in to comment.