Change xmlutils propfind to return readonly calendars
This commit is contained in:
parent
519a40d714
commit
54d71355d1
@ -542,9 +542,8 @@ class Application(object):
|
|||||||
headers = {
|
headers = {
|
||||||
"DAV": "1, 2, 3, calendar-access, addressbook, extended-mkcol",
|
"DAV": "1, 2, 3, calendar-access, addressbook, extended-mkcol",
|
||||||
"Content-Type": "text/xml"}
|
"Content-Type": "text/xml"}
|
||||||
collections = set(read_collections + write_collections)
|
|
||||||
answer = xmlutils.propfind(
|
answer = xmlutils.propfind(
|
||||||
environ["PATH_INFO"], content, collections, user)
|
environ["PATH_INFO"], content, read_collections, write_collections, user)
|
||||||
return client.MULTI_STATUS, headers, answer
|
return client.MULTI_STATUS, headers, answer
|
||||||
|
|
||||||
def proppatch(self, environ, read_collections, write_collections, content,
|
def proppatch(self, environ, read_collections, write_collections, content,
|
||||||
|
@ -207,7 +207,7 @@ def delete(path, collection):
|
|||||||
return _pretty_xml(multistatus)
|
return _pretty_xml(multistatus)
|
||||||
|
|
||||||
|
|
||||||
def propfind(path, xml_request, collections, user=None):
|
def propfind(path, xml_request, read_collections, write_collections, user=None):
|
||||||
"""Read and answer PROPFIND requests.
|
"""Read and answer PROPFIND requests.
|
||||||
|
|
||||||
Read rfc4918-9.1 for info.
|
Read rfc4918-9.1 for info.
|
||||||
@ -233,14 +233,21 @@ def propfind(path, xml_request, collections, user=None):
|
|||||||
# Writing answer
|
# Writing answer
|
||||||
multistatus = ET.Element(_tag("D", "multistatus"))
|
multistatus = ET.Element(_tag("D", "multistatus"))
|
||||||
|
|
||||||
for collection in collections:
|
collections = []
|
||||||
response = _propfind_response(path, collection, props, user)
|
for collection in write_collections:
|
||||||
|
collections.append(collection)
|
||||||
|
response = _propfind_response(path, collection, props, user, write=True)
|
||||||
|
multistatus.append(response)
|
||||||
|
for collection in read_collections:
|
||||||
|
if collection in collections:
|
||||||
|
continue
|
||||||
|
response = _propfind_response(path, collection, props, user, write=False)
|
||||||
multistatus.append(response)
|
multistatus.append(response)
|
||||||
|
|
||||||
return _pretty_xml(multistatus)
|
return _pretty_xml(multistatus)
|
||||||
|
|
||||||
|
|
||||||
def _propfind_response(path, item, props, user):
|
def _propfind_response(path, item, props, user, write=False):
|
||||||
"""Build and return a PROPFIND response."""
|
"""Build and return a PROPFIND response."""
|
||||||
is_collection = isinstance(item, ical.Collection)
|
is_collection = isinstance(item, ical.Collection)
|
||||||
if is_collection:
|
if is_collection:
|
||||||
@ -300,11 +307,12 @@ def _propfind_response(path, item, props, user):
|
|||||||
element.append(tag)
|
element.append(tag)
|
||||||
elif tag == _tag("D", "current-user-privilege-set"):
|
elif tag == _tag("D", "current-user-privilege-set"):
|
||||||
privilege = ET.Element(_tag("D", "privilege"))
|
privilege = ET.Element(_tag("D", "privilege"))
|
||||||
privilege.append(ET.Element(_tag("D", "all")))
|
if write:
|
||||||
|
privilege.append(ET.Element(_tag("D", "all")))
|
||||||
|
privilege.append(ET.Element(_tag("D", "write")))
|
||||||
|
privilege.append(ET.Element(_tag("D", "write-properties")))
|
||||||
|
privilege.append(ET.Element(_tag("D", "write-content")))
|
||||||
privilege.append(ET.Element(_tag("D", "read")))
|
privilege.append(ET.Element(_tag("D", "read")))
|
||||||
privilege.append(ET.Element(_tag("D", "write")))
|
|
||||||
privilege.append(ET.Element(_tag("D", "write-properties")))
|
|
||||||
privilege.append(ET.Element(_tag("D", "write-content")))
|
|
||||||
element.append(privilege)
|
element.append(privilege)
|
||||||
elif tag == _tag("D", "supported-report-set"):
|
elif tag == _tag("D", "supported-report-set"):
|
||||||
for report_name in (
|
for report_name in (
|
||||||
|
Loading…
Reference in New Issue
Block a user