1
0
Fork 0
mirror of https://github.com/Kozea/Radicale.git synced 2025-06-26 16:45:52 +00:00

Merge pull request #1409 from pbiering/fix-1314

add option for global permit of delete of collection (default: True t…
This commit is contained in:
Peter Bieringer 2024-03-09 07:16:18 +01:00 committed by GitHub
commit 44cfd38263
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 21 additions and 1 deletions

View file

@ -812,6 +812,12 @@ Default: `owner_only`
File for the rights backend `from_file`. See the
[Rights](#authentication-and-rights) section.
##### permit_delete_collection
(New since 3.1.9)
Global control of permission to delete complete collection (default: True)
#### storage
##### type

3
config
View file

@ -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]

View file

@ -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.
@ -84,6 +85,8 @@ class Application(ApplicationPartDelete, ApplicationPartHead,
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)

View file

@ -38,6 +38,7 @@ class ApplicationBase:
_rights: rights.BaseRights
_web: web.BaseWeb
_encoding: str
_permit_delete_collection: bool
def __init__(self, configuration: config.Configuration) -> None:
self.configuration = configuration

View file

@ -68,7 +68,10 @@ class ApplicationPartDelete(ApplicationBase):
# ETag precondition not verified, do not delete item
return httputils.PRECONDITION_FAILED
if isinstance(item, storage.BaseCollection):
xml_answer = xml_delete(base_prefix, path, item)
if self._permit_delete_collection:
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

View file

@ -184,6 +184,10 @@ DEFAULT_CONFIG_SCHEMA: types.CONFIG_SCHEMA = OrderedDict([
"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",