[CalendarServer-changes] [7188] CalendarServer/trunk
source_changes at macosforge.org
source_changes at macosforge.org
Sat Mar 12 20:33:14 PST 2011
Revision: 7188
http://trac.macosforge.org/projects/calendarserver/changeset/7188
Author: cdaboo at apple.com
Date: 2011-03-12 20:33:13 -0800 (Sat, 12 Mar 2011)
Log Message:
-----------
Add error descriptions to all ErrorResponses.
Modified Paths:
--------------
CalendarServer/trunk/twext/web2/dav/http.py
CalendarServer/trunk/twistedcaldav/dropbox.py
CalendarServer/trunk/twistedcaldav/freebusyurl.py
CalendarServer/trunk/twistedcaldav/method/copymove.py
CalendarServer/trunk/twistedcaldav/method/copymove_contact.py
CalendarServer/trunk/twistedcaldav/method/get.py
CalendarServer/trunk/twistedcaldav/method/mkcalendar.py
CalendarServer/trunk/twistedcaldav/method/mkcol.py
CalendarServer/trunk/twistedcaldav/method/post.py
CalendarServer/trunk/twistedcaldav/method/put.py
CalendarServer/trunk/twistedcaldav/method/put_addressbook_common.py
CalendarServer/trunk/twistedcaldav/method/put_common.py
CalendarServer/trunk/twistedcaldav/method/report.py
CalendarServer/trunk/twistedcaldav/method/report_addressbook_query.py
CalendarServer/trunk/twistedcaldav/method/report_calendar_query.py
CalendarServer/trunk/twistedcaldav/method/report_freebusy.py
CalendarServer/trunk/twistedcaldav/method/report_multiget_common.py
CalendarServer/trunk/twistedcaldav/method/report_sync_collection.py
CalendarServer/trunk/twistedcaldav/resource.py
CalendarServer/trunk/twistedcaldav/schedule.py
CalendarServer/trunk/twistedcaldav/scheduling/caldav.py
CalendarServer/trunk/twistedcaldav/scheduling/imip.py
CalendarServer/trunk/twistedcaldav/scheduling/implicit.py
CalendarServer/trunk/twistedcaldav/scheduling/ischedule.py
CalendarServer/trunk/twistedcaldav/scheduling/scheduler.py
CalendarServer/trunk/twistedcaldav/sharing.py
CalendarServer/trunk/twistedcaldav/storebridge.py
CalendarServer/trunk/twistedcaldav/timezoneservice.py
Modified: CalendarServer/trunk/twext/web2/dav/http.py
===================================================================
--- CalendarServer/trunk/twext/web2/dav/http.py 2011-03-13 04:31:12 UTC (rev 7187)
+++ CalendarServer/trunk/twext/web2/dav/http.py 2011-03-13 04:33:13 UTC (rev 7188)
@@ -79,8 +79,9 @@
error.namespace = xml_namespace
error.name = xml_name
- if description:
- output = davxml.Error(error, davxml.ErrorDescription(description)).toxml()
+ self.description = description
+ if self.description:
+ output = davxml.Error(error, davxml.ErrorDescription(self.description)).toxml()
else:
output = davxml.Error(error).toxml()
@@ -337,7 +338,7 @@
def messageForFailure(failure):
if failure.check(HTTPError):
if isinstance(failure.value.response, ErrorResponse):
- return None
- if isinstance(failure.value.response, StatusResponse):
return failure.value.response.description
+ elif isinstance(failure.value.response, StatusResponse):
+ return failure.value.response.description
return str(failure)
Modified: CalendarServer/trunk/twistedcaldav/dropbox.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/dropbox.py 2011-03-13 04:31:12 UTC (rev 7187)
+++ CalendarServer/trunk/twistedcaldav/dropbox.py 2011-03-13 04:33:13 UTC (rev 7188)
@@ -119,5 +119,6 @@
def http_PUT(self, request):
return ErrorResponse(
responsecode.FORBIDDEN,
- (calendarserver_namespace, "valid-drop-box")
+ (calendarserver_namespace, "valid-drop-box"),
+ "Cannot store resources in dropbox",
)
Modified: CalendarServer/trunk/twistedcaldav/freebusyurl.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/freebusyurl.py 2011-03-13 04:31:12 UTC (rev 7187)
+++ CalendarServer/trunk/twistedcaldav/freebusyurl.py 2011-03-13 04:33:13 UTC (rev 7188)
@@ -162,7 +162,8 @@
if self.token or self.user:
raise HTTPError(ErrorResponse(
responsecode.NOT_ACCEPTABLE,
- (calendarserver_namespace, "supported-query-parameter")
+ (calendarserver_namespace, "supported-query-parameter"),
+ "Invalid query parameter",
))
# Check format
@@ -171,7 +172,8 @@
if self.format not in ("text/calendar", "text/plain"):
raise HTTPError(ErrorResponse(
responsecode.NOT_ACCEPTABLE,
- (calendarserver_namespace, "supported-format")
+ (calendarserver_namespace, "supported-format"),
+ "Invalid return format requested",
))
else:
self.format = "text/calendar"
@@ -191,7 +193,8 @@
except ValueError:
raise HTTPError(ErrorResponse(
responsecode.BAD_REQUEST,
- (calendarserver_namespace, "valid-query-parameters")
+ (calendarserver_namespace, "valid-query-parameters"),
+ "Invalid query parameters",
))
# Sanity check start/end/duration
@@ -200,14 +203,16 @@
if self.end and self.duration:
raise HTTPError(ErrorResponse(
responsecode.NOT_ACCEPTABLE,
- (calendarserver_namespace, "valid-query-parameters")
+ (calendarserver_namespace, "valid-query-parameters"),
+ "Invalid query parameters",
))
# Duration must be positive
if self.duration and self.duration.days < 0:
raise HTTPError(ErrorResponse(
responsecode.BAD_REQUEST,
- (calendarserver_namespace, "valid-query-parameters")
+ (calendarserver_namespace, "valid-query-parameters"),
+ "Invalid query parameters",
))
# Now fill in the missing pieces
@@ -223,7 +228,8 @@
if self.end <= self.start:
raise HTTPError(ErrorResponse(
responsecode.BAD_REQUEST,
- (calendarserver_namespace, "valid-query-parameters")
+ (calendarserver_namespace, "valid-query-parameters"),
+ "Invalid query parameters",
))
# TODO: We should probably verify that the actual time-range is within sensible bounds (e.g. not too far in the past or future and not too long)
Modified: CalendarServer/trunk/twistedcaldav/method/copymove.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/method/copymove.py 2011-03-13 04:31:12 UTC (rev 7187)
+++ CalendarServer/trunk/twistedcaldav/method/copymove.py 2011-03-13 04:33:13 UTC (rev 7188)
@@ -90,7 +90,8 @@
log.err("Attempt to copy a calendar collection into another calendar collection %s" % destination)
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "calendar-collection-location-ok")
+ (caldav_namespace, "calendar-collection-location-ok"),
+ "Cannot copy calendar collection inside another calendar collection",
))
# We also do not allow regular collections in calendar collections
@@ -173,7 +174,8 @@
log.err("Attempt to move a calendar collection into another calendar collection %s" % destination)
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "calendar-collection-location-ok")
+ (caldav_namespace, "calendar-collection-location-ok"),
+ "Cannot move calendar collection inside another calendar collection",
))
# We also do not allow regular collections in calendar collections
Modified: CalendarServer/trunk/twistedcaldav/method/copymove_contact.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/method/copymove_contact.py 2011-03-13 04:31:12 UTC (rev 7187)
+++ CalendarServer/trunk/twistedcaldav/method/copymove_contact.py 2011-03-13 04:33:13 UTC (rev 7188)
@@ -83,7 +83,8 @@
log.err("Attempt to copy an addressbook collection into another addressbook collection %s" % destination)
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (carddav_namespace, "addressbook-collection-location-ok")
+ (carddav_namespace, "addressbook-collection-location-ok"),
+ "Cannot copy address book collection inside another address book collection",
))
# We also do not allow regular collections in addressbook collections
@@ -153,7 +154,8 @@
log.err("Attempt to move an addressbook collection into another addressbook collection %s" % destination)
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (carddav_namespace, "addressbook-collection-location-ok")
+ (carddav_namespace, "addressbook-collection-location-ok"),
+ "Cannot move address book collection inside another address book collection",
))
# We also do not allow regular collections in addressbook collections
Modified: CalendarServer/trunk/twistedcaldav/method/get.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/method/get.py 2011-03-13 04:31:12 UTC (rev 7187)
+++ CalendarServer/trunk/twistedcaldav/method/get.py 2011-03-13 04:33:13 UTC (rev 7188)
@@ -48,7 +48,8 @@
if len(action) != 1:
raise HTTPError(ErrorResponse(
responsecode.BAD_REQUEST,
- (calendarserver_namespace, "valid-action")
+ (calendarserver_namespace, "valid-action"),
+ "Invalid action parameter: %s" % (action,),
))
action = action[0]
@@ -59,7 +60,8 @@
if dispatch is None:
raise HTTPError(ErrorResponse(
responsecode.BAD_REQUEST,
- (calendarserver_namespace, "supported-action")
+ (calendarserver_namespace, "supported-action"),
+ "Action not supported: %s" % (action,),
))
response = (yield dispatch(request))
Modified: CalendarServer/trunk/twistedcaldav/method/mkcalendar.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/method/mkcalendar.py 2011-03-13 04:31:12 UTC (rev 7187)
+++ CalendarServer/trunk/twistedcaldav/method/mkcalendar.py 2011-03-13 04:33:13 UTC (rev 7188)
@@ -53,7 +53,8 @@
log.err("Attempt to create collection where resource exists: %s" % (self,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (davxml.dav_namespace, "resource-must-be-null")
+ (davxml.dav_namespace, "resource-must-be-null"),
+ "Resource already exists",
))
if not parent.isCollection():
@@ -61,7 +62,8 @@
% (self,))
raise HTTPError(ErrorResponse(
responsecode.CONFLICT,
- (caldavxml.caldav_namespace, "calendar-collection-location-ok")
+ (caldavxml.caldav_namespace, "calendar-collection-location-ok"),
+ "Cannot create calendar inside another calendar",
))
#
Modified: CalendarServer/trunk/twistedcaldav/method/mkcol.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/method/mkcol.py 2011-03-13 04:31:12 UTC (rev 7187)
+++ CalendarServer/trunk/twistedcaldav/method/mkcol.py 2011-03-13 04:33:13 UTC (rev 7188)
@@ -58,7 +58,8 @@
% (self,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (davxml.dav_namespace, "resource-must-be-null")
+ (davxml.dav_namespace, "resource-must-be-null"),
+ "Resource already exists",
))
if not parent.isCollection():
@@ -66,7 +67,8 @@
% (self,))
raise HTTPError(ErrorResponse(
responsecode.CONFLICT,
- (davxml.dav_namespace, "collection-location-ok")
+ (davxml.dav_namespace, "collection-location-ok"),
+ "Cannot create calendar inside another calendar",
))
#
Modified: CalendarServer/trunk/twistedcaldav/method/post.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/method/post.py 2011-03-13 04:31:12 UTC (rev 7187)
+++ CalendarServer/trunk/twistedcaldav/method/post.py 2011-03-13 04:33:13 UTC (rev 7188)
@@ -77,7 +77,8 @@
self.log_error("MIME type %s not allowed in calendar collection" % (content_type,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "supported-calendar-data")
+ (caldav_namespace, "supported-calendar-data"),
+ "Wrong MIME type for calendar collection",
))
# Read the calendar component from the stream
@@ -133,7 +134,8 @@
self.log_error("MIME type %s not allowed in address book collection" % (content_type,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (carddav_namespace, "supported-address-data")
+ (carddav_namespace, "supported-address-data"),
+ "Wrong MIME type for address book collection",
))
# Read the calendar component from the stream
Modified: CalendarServer/trunk/twistedcaldav/method/put.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/method/put.py 2011-03-13 04:31:12 UTC (rev 7187)
+++ CalendarServer/trunk/twistedcaldav/method/put.py 2011-03-13 04:33:13 UTC (rev 7188)
@@ -54,7 +54,8 @@
log.err("MIME type %s not allowed in calendar collection" % (content_type,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "supported-calendar-data")
+ (caldav_namespace, "supported-calendar-data"),
+ "Invalid MIME type for calendar collection",
))
# Read the calendar component from the stream
@@ -96,7 +97,8 @@
log.err("MIME type %s not allowed in address book collection" % (content_type,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (carddav_namespace, "supported-address-data")
+ (carddav_namespace, "supported-address-data"),
+ "Invalid MIME type for address book collection",
))
# Read the vcard component from the stream
Modified: CalendarServer/trunk/twistedcaldav/method/put_addressbook_common.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/method/put_addressbook_common.py 2011-03-13 04:31:12 UTC (rev 7187)
+++ CalendarServer/trunk/twistedcaldav/method/put_addressbook_common.py 2011-03-13 04:33:13 UTC (rev 7188)
@@ -167,7 +167,8 @@
log.err(message)
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- customxml.MaxResources()
+ customxml.MaxResources(),
+ message,
))
if not self.sourceadbk:
@@ -178,7 +179,8 @@
log.err(message)
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (carddav_namespace, "supported-address-data")
+ (carddav_namespace, "supported-address-data"),
+ "Invalid content-type",
))
# At this point we need the calendar data to do more tests
@@ -192,7 +194,8 @@
log.err(str(e))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (carddav_namespace, "valid-address-data")
+ (carddav_namespace, "valid-address-data"),
+ "Could not parse vCard",
))
# Valid vcard data for CalDAV check
@@ -201,7 +204,8 @@
log.err(message)
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (carddav_namespace, "valid-addressbook-object-resource")
+ (carddav_namespace, "valid-addressbook-object-resource"),
+ "Invalid vCard data",
))
# Must have a valid UID at this point
@@ -214,7 +218,8 @@
log.err("Source vcard does not have a UID: %s" % self.source.name())
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (carddav_namespace, "valid-addressbook-object-resource")
+ (carddav_namespace, "valid-addressbook-object-resource"),
+ "Missing UID in vCard",
))
# FIXME: We need this here because we have to re-index the destination. Ideally it
@@ -227,7 +232,8 @@
log.err(message)
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (carddav_namespace, "max-resource-size")
+ (carddav_namespace, "max-resource-size"),
+ "Address data too large",
))
# Check access
@@ -433,7 +439,8 @@
rname.encode("utf-8")
)
)
- )
+ ),
+ "UID already used in another resource",
))
# Do the actual put or copy
Modified: CalendarServer/trunk/twistedcaldav/method/put_common.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/method/put_common.py 2011-03-13 04:31:12 UTC (rev 7187)
+++ CalendarServer/trunk/twistedcaldav/method/put_common.py 2011-03-13 04:33:13 UTC (rev 7188)
@@ -215,7 +215,8 @@
log.err(message)
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- customxml.MaxResources()
+ customxml.MaxResources(),
+ "Too many resources in collection",
))
# Valid data sizes - do before parsing the data
@@ -226,7 +227,8 @@
log.err(message)
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "max-resource-size")
+ (caldav_namespace, "max-resource-size"),
+ "Calendar data too large",
))
else:
# Valid calendar data size check
@@ -235,7 +237,8 @@
log.err(message)
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "max-resource-size")
+ (caldav_namespace, "max-resource-size"),
+ "Calendar data too large",
))
if not self.sourcecal:
@@ -246,7 +249,8 @@
log.err(message)
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "supported-calendar-data")
+ (caldav_namespace, "supported-calendar-data"),
+ "Invalid content-type for data",
))
# At this point we need the calendar data to do more tests
@@ -288,7 +292,8 @@
log.err(message)
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "valid-calendar-object-resource")
+ (caldav_namespace, "valid-calendar-object-resource"),
+ "Invalid calendar data",
))
# Valid attendee list size check
@@ -298,7 +303,8 @@
raise HTTPError(
ErrorResponse(
responsecode.FORBIDDEN,
- MaxAttendeesPerInstance.fromString(str(config.MaxAttendeesPerInstance))
+ MaxAttendeesPerInstance.fromString(str(config.MaxAttendeesPerInstance)),
+ "Too many attendees in calenbdar data",
)
)
@@ -316,7 +322,8 @@
log.err("Source calendar does not have a UID: %s" % self.source)
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "valid-calendar-object-resource")
+ (caldav_namespace, "valid-calendar-object-resource"),
+ "Missing UID in calendar data",
))
# FIXME: We need this here because we have to re-index the destination. Ideally it
@@ -526,7 +533,8 @@
if self.access is None:
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (calendarserver_namespace, "valid-access-restriction")
+ (calendarserver_namespace, "valid-access-restriction"),
+ "Private event access level not allowed",
))
# Only DAV:owner is able to set the property to other than PUBLIC
@@ -537,7 +545,8 @@
if davxml.Principal(parent_owner) != authz and self.access != Component.ACCESS_PUBLIC:
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (calendarserver_namespace, "valid-access-restriction-change")
+ (calendarserver_namespace, "valid-access-restriction-change"),
+ "Private event access level change not allowed",
))
return None
@@ -561,11 +570,11 @@
try:
result = self.calendar.truncateRecurrence(config.MaxInstancesForRRULE)
except (ValueError, TypeError), ex:
- msg = "Cannot truncate calendar resource: %s" % (ex,)
- log.err(msg)
+ log.err("Cannot truncate calendar resource: %s" % (ex,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "valid-calendar-data"), description=msg
+ (caldav_namespace, "valid-calendar-data"),
+ "Cannot truncate recurrences",
))
if result:
self.calendardata = str(self.calendar)
@@ -795,11 +804,11 @@
try:
self.calendar = PerUserDataFilter(accessUID).merge(self.calendar.duplicate(), oldCal)
except ValueError:
- msg = "Invalid per-user data merge"
- log.err(msg)
+ log.err("Invalid per-user data merge")
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "valid-calendar-data"), description=msg
+ (caldav_namespace, "valid-calendar-data"),
+ "Cannot merge per-user data",
))
self.calendardata = None
@@ -960,7 +969,8 @@
rname.encode("utf-8")
)
)
- )
+ ),
+ "UID already exists",
))
@@ -1047,7 +1057,8 @@
elif isinstance(err, TooManyInstancesError):
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- NumberOfRecurrencesWithinLimits(PCDATAElement(str(err.max_allowed)))
+ NumberOfRecurrencesWithinLimits(PCDATAElement(str(err.max_allowed))),
+ "Too many recurrence instances",
))
else:
# Display the traceback. Unfortunately this will usually be
Modified: CalendarServer/trunk/twistedcaldav/method/report.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/method/report.py 2011-03-13 04:31:12 UTC (rev 7187)
+++ CalendarServer/trunk/twistedcaldav/method/report.py 2011-03-13 04:33:13 UTC (rev 7188)
@@ -119,7 +119,8 @@
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- davxml.SupportedReport()
+ davxml.SupportedReport(),
+ "Report not supported on this resource",
))
#
Modified: CalendarServer/trunk/twistedcaldav/method/report_addressbook_query.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/method/report_addressbook_query.py 2011-03-13 04:31:12 UTC (rev 7187)
+++ CalendarServer/trunk/twistedcaldav/method/report_addressbook_query.py 2011-03-13 04:33:13 UTC (rev 7188)
@@ -83,7 +83,8 @@
log.err(message)
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (carddav_namespace, "supported-address-data")
+ (carddav_namespace, "supported-address-data"),
+ "Invalid address-data",
))
else:
@@ -94,7 +95,8 @@
log.err("Invalid filter element: %r" % (filter,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (carddav_namespace, "valid-filter")
+ (carddav_namespace, "valid-filter"),
+ "Invalid filter element",
))
matchcount = [0,]
Modified: CalendarServer/trunk/twistedcaldav/method/report_calendar_query.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/method/report_calendar_query.py 2011-03-13 04:31:12 UTC (rev 7187)
+++ CalendarServer/trunk/twistedcaldav/method/report_calendar_query.py 2011-03-13 04:33:13 UTC (rev 7188)
@@ -76,7 +76,8 @@
log.err(msg)
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "valid-calendar-data"), description=msg
+ (caldav_namespace, "valid-calendar-data"),
+ "Invalid calendar-data",
))
if query_tz:
filter.settimezone(query_tz)
@@ -99,7 +100,8 @@
log.err(message)
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "supported-calendar-data")
+ (caldav_namespace, "supported-calendar-data"),
+ "Invalid calendar-data",
))
else:
@@ -110,7 +112,8 @@
log.err("Invalid filter element: %r" % (xmlfilter,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "valid-filter")
+ (caldav_namespace, "valid-filter"),
+ "Invalid filter element",
))
matchcount = [0]
@@ -241,13 +244,15 @@
log.err("Too many instances need to be computed in calendar-query report")
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- NumberOfRecurrencesWithinLimits(PCDATAElement(str(ex.max_allowed)))
+ NumberOfRecurrencesWithinLimits(PCDATAElement(str(ex.max_allowed))),
+ "Too many instrances",
))
except NumberOfMatchesWithinLimits:
log.err("Too many matching components in calendar-query report")
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- davxml.NumberOfMatchesWithinLimits()
+ davxml.NumberOfMatchesWithinLimits(),
+ "Too many components",
))
if not hasattr(request, "extendedLogItems"):
Modified: CalendarServer/trunk/twistedcaldav/method/report_freebusy.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/method/report_freebusy.py 2011-03-13 04:31:12 UTC (rev 7187)
+++ CalendarServer/trunk/twistedcaldav/method/report_freebusy.py 2011-03-13 04:33:13 UTC (rev 7188)
@@ -80,7 +80,11 @@
yield report_common.applyToCalendarCollections(self, request, request.uri, depth, generateFreeBusyInfo, (caldavxml.ReadFreeBusy(),))
except NumberOfMatchesWithinLimits:
log.err("Too many matching components in free-busy report")
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, davxml.NumberOfMatchesWithinLimits()))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ davxml.NumberOfMatchesWithinLimits(),
+ "Too many components"
+ ))
# Now build a new calendar object with the free busy info we have
fbcalendar = report_common.buildFreeBusyResult(fbinfo, timerange)
Modified: CalendarServer/trunk/twistedcaldav/method/report_multiget_common.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/method/report_multiget_common.py 2011-03-13 04:31:12 UTC (rev 7187)
+++ CalendarServer/trunk/twistedcaldav/method/report_multiget_common.py 2011-03-13 04:33:13 UTC (rev 7188)
@@ -94,14 +94,22 @@
result = True
if not result:
log.err(message)
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, precondition))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ precondition,
+ "Invalid object data element",
+ ))
else:
raise AssertionError("We shouldn't be here")
# Check size of results is within limit when data property requested
if hasData and len(resources) > config.MaxMultigetWithDataHrefs:
log.err("Too many results in multiget report returning data: %d" % len(resources))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, davxml.NumberOfMatchesWithinLimits()))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ davxml.NumberOfMatchesWithinLimits(),
+ "Too many resources",
+ ))
"""
Three possibilities exist:
@@ -259,14 +267,22 @@
directoryAddressBookLock, limited = (yield self.directory.cacheVCardsForAddressBookQuery(addressBookFilter, propertyreq, limit) )
if limited:
log.err("Too many results in multiget report: %d" % len(resources))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (dav_namespace, "number-of-matches-within-limits")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (dav_namespace, "number-of-matches-within-limits"),
+ "Too many results",
+ ))
else:
#get vCards and filter
limit = config.DirectoryAddressBook.MaxQueryResults
vCardRecords, limited = (yield self.directory.vCardRecordsForAddressBookQuery( addressBookFilter, propertyreq, limit ))
if limited:
log.err("Too many results in multiget report: %d" % len(resources))
- raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (dav_namespace, "number-of-matches-within-limits")))
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (dav_namespace, "number-of-matches-within-limits"),
+ "Too many results",
+ ))
for href in valid_hrefs:
matchingRecord = None
Modified: CalendarServer/trunk/twistedcaldav/method/report_sync_collection.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/method/report_sync_collection.py 2011-03-13 04:31:12 UTC (rev 7187)
+++ CalendarServer/trunk/twistedcaldav/method/report_sync_collection.py 2011-03-13 04:33:13 UTC (rev 7188)
@@ -53,7 +53,8 @@
log.err("sync-collection report is only allowed on calendar/inbox/addressbook/notification collection resources %s" % (self,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- davxml.SupportedReport()
+ davxml.SupportedReport(),
+ "Report not supported on this resource",
))
responses = []
Modified: CalendarServer/trunk/twistedcaldav/resource.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/resource.py 2011-03-13 04:31:12 UTC (rev 7187)
+++ CalendarServer/trunk/twistedcaldav/resource.py 2011-03-13 04:33:13 UTC (rev 7188)
@@ -130,7 +130,8 @@
def http_MKCALENDAR(self, request):
return ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "calendar-collection-location-ok")
+ (caldav_namespace, "calendar-collection-location-ok"),
+ "Resource is read-only",
)
class ReadOnlyNoCopyResourceMixIn (ReadOnlyResourceMixIn):
@@ -1346,7 +1347,8 @@
except ValueError:
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (dav_namespace, "valid-sync-token")
+ (dav_namespace, "valid-sync-token"),
+ "Sync token is invalid",
))
else:
revision = 0
@@ -1356,7 +1358,8 @@
except SyncTokenValidException:
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (dav_namespace, "valid-sync-token")
+ (dav_namespace, "valid-sync-token"),
+ "Sync token not recognized",
))
returnValue((changed, removed, notallowed, current_token))
@@ -1454,7 +1457,8 @@
self.log_error("Cannot create a calendar collection within a calendar collection %s" % (parent,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldavxml.caldav_namespace, "calendar-collection-location-ok")
+ (caldavxml.caldav_namespace, "calendar-collection-location-ok"),
+ "Cannot create a calendar collection inside another calendar collection",
))
# Check for any quota limits
@@ -1464,7 +1468,8 @@
self.log_error("Cannot create a calendar collection because there are too many already present in %s" % (parent,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- customxml.MaxCollections()
+ customxml.MaxCollections(),
+ "Too many calendar collections",
))
returnValue((yield self.createCalendarCollection()))
@@ -1547,7 +1552,8 @@
self.log_error("Cannot create an address book collection within an address book collection %s" % (parent,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (carddavxml.carddav_namespace, "addressbook-collection-location-ok")
+ (carddavxml.carddav_namespace, "addressbook-collection-location-ok"),
+ "Cannot create an address book collection inside of an address book collection",
))
# Check for any quota limits
@@ -1557,7 +1563,8 @@
self.log_error("Cannot create a calendar collection because there are too many already present in %s" % (parent,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- customxml.MaxCollections()
+ customxml.MaxCollections(),
+ "Too many address book collections",
))
returnValue((yield self.createAddressBookCollection()))
Modified: CalendarServer/trunk/twistedcaldav/schedule.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/schedule.py 2011-03-13 04:31:12 UTC (rev 7187)
+++ CalendarServer/trunk/twistedcaldav/schedule.py 2011-03-13 04:33:13 UTC (rev 7188)
@@ -210,7 +210,8 @@
# Validate that href's point to a valid calendar.
raise HTTPError(ErrorResponse(
responsecode.CONFLICT,
- (caldav_namespace, "valid-calendar-url")
+ (caldav_namespace, "valid-calendar-url"),
+ "Invalid URI",
))
elif property.qname() == (caldav_namespace, "schedule-default-calendar-URL"):
@@ -226,7 +227,8 @@
# Validate that href's point to a valid calendar.
raise HTTPError(ErrorResponse(
responsecode.CONFLICT,
- (caldav_namespace, "valid-schedule-default-calendar-URL")
+ (caldav_namespace, "valid-schedule-default-calendar-URL"),
+ "Invalid URI",
))
else:
# Canonicalize the URL to __uids__ form
Modified: CalendarServer/trunk/twistedcaldav/scheduling/caldav.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/scheduling/caldav.py 2011-03-13 04:31:12 UTC (rev 7187)
+++ CalendarServer/trunk/twistedcaldav/scheduling/caldav.py 2011-03-13 04:33:13 UTC (rev 7188)
@@ -114,7 +114,8 @@
log.err("Could not access Inbox for recipient: %s" % (recipient.cuaddr,))
err = HTTPError(ErrorResponse(
responsecode.NOT_FOUND,
- (caldav_namespace, "recipient-permissions")
+ (caldav_namespace, "recipient-permissions"),
+ "Access to inbox denied",
))
self.responses.add(
recipient.cuaddr,
@@ -159,7 +160,8 @@
log.err("Could not store data in Inbox : %s" % (recipient.inbox,))
err = HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "recipient-permissions")
+ (caldav_namespace, "recipient-permissions"),
+ "Could not store data in inbox",
))
responses.add(recipient.cuaddr, Failure(exc_value=err), reqstatus=e.msg)
returnValue(False)
@@ -190,7 +192,8 @@
log.err("Could not store data in Inbox : %s" % (recipient.inbox,))
err = HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "recipient-permissions")
+ (caldav_namespace, "recipient-permissions"),
+ "Could not store data in inbox",
))
responses.add(recipient.cuaddr, Failure(exc_value=err), reqstatus=iTIPRequestStatus.NO_AUTHORITY)
returnValue(False)
@@ -231,7 +234,8 @@
log.err("Could not determine free busy information: %s" % (recipient.cuaddr,))
err = HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "recipient-permissions")
+ (caldav_namespace, "recipient-permissions"),
+ "Could not determine free busy information",
))
responses.add(
recipient.cuaddr,
Modified: CalendarServer/trunk/twistedcaldav/scheduling/imip.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/scheduling/imip.py 2011-03-13 04:31:12 UTC (rev 7187)
+++ CalendarServer/trunk/twistedcaldav/scheduling/imip.py 2011-03-13 04:33:13 UTC (rev 7188)
@@ -68,7 +68,8 @@
for recipient in self.recipients:
err = HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "recipient-failed")
+ (caldav_namespace, "recipient-failed"),
+ "iMIP method not allowed: %s" % (method,),
))
self.responses.add(
recipient.cuaddr,
@@ -95,7 +96,8 @@
log.err("Could not do server-to-imip request : %s %s" % (self, e))
err = HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "recipient-failed")
+ (caldav_namespace, "recipient-failed"),
+ "iMIP request failed",
))
self.responses.add(
recipient.cuaddr,
@@ -116,7 +118,8 @@
for recipient in self.recipients:
err = HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "recipient-failed")
+ (caldav_namespace, "recipient-failed"),
+ "iMIP request failed",
))
self.responses.add(
recipient.cuaddr,
Modified: CalendarServer/trunk/twistedcaldav/scheduling/implicit.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/scheduling/implicit.py 2011-03-13 04:31:12 UTC (rev 7187)
+++ CalendarServer/trunk/twistedcaldav/scheduling/implicit.py 2011-03-13 04:33:13 UTC (rev 7188)
@@ -96,7 +96,8 @@
):
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "valid-attendee-change")
+ (caldav_namespace, "valid-attendee-change"),
+ "Cannot change scheduling object mode",
))
returnValue((self.action != "none", new_type == "schedule",))
@@ -120,7 +121,8 @@
log.debug("Implicit - cannot MOVE with a scheduling object resource")
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "unique-scheduling-object-resource")
+ (caldav_namespace, "unique-scheduling-object-resource"),
+ "Cannot MOVE a scheduling object resource",
))
else:
self.action = "none"
@@ -153,7 +155,8 @@
log.debug("Implicit - cannot COPY with a scheduling object resource")
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "unique-scheduling-object-resource")
+ (caldav_namespace, "unique-scheduling-object-resource"),
+ "Cannot COPY with a scheduling object resource",
))
else:
self.action = "none"
@@ -330,7 +333,8 @@
log.error("Originator '%s' is not enabled for calendaring" % (self.originatorPrincipal,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "invalid-originator")
+ (caldav_namespace, "invalid-originator"),
+ "Originator not enabled",
))
# Pick the first mailto cu address or the first other type
@@ -349,7 +353,8 @@
log.error("Only one ORGANIZER is allowed in an iCalendar object:\n%s" % (self.calendar,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "single-organizer")
+ (caldav_namespace, "single-organizer"),
+ "Only one organizer allowed in scheduling object resource",
))
# Get the ATTENDEEs
@@ -382,7 +387,8 @@
log.debug("Implicit - found component with same UID in a different collection: %s" % (check_uri,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "unique-scheduling-object-resource")
+ (caldav_namespace, "unique-scheduling-object-resource"),
+ "Cannot duplicate scheduling object resource",
))
@inlineCallbacks
@@ -557,7 +563,8 @@
log.error("Cannot change ORGANIZER: UID:%s" % (self.uid,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "valid-organizer-change")
+ (caldav_namespace, "valid-organizer-change"),
+ "Organizer cannot be changed",
))
else:
# Special case of SCHEDULE-FORCE-SEND added to attendees and no other change
@@ -789,7 +796,8 @@
log.error("Cannot change ORGANIZER: UID:%s" % (self.uid,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "valid-attendee-change")
+ (caldav_namespace, "valid-attendee-change"),
+ "Cannot change organizer",
))
else:
self.oldcalendar = None
@@ -803,7 +811,8 @@
log.error("Attendee '%s' is not allowed to change SCHEDULE-AGENT on organizer: UID:%s" % (self.attendeePrincipal, self.uid,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "valid-attendee-change")
+ (caldav_namespace, "valid-attendee-change"),
+ "Cannot alter organizer",
))
# Determine whether the current change is allowed
@@ -820,7 +829,8 @@
log.error("Attendee '%s' is not allowed to make an unauthorized change to an organized event: UID:%s" % (self.attendeePrincipal, self.uid,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "valid-attendee-change")
+ (caldav_namespace, "valid-attendee-change"),
+ "Attendee changes are not allowed",
))
if not doITipReply:
@@ -844,7 +854,8 @@
log.error("Attendee '%s' is not allowed to set SCHEDULE-AGENT=SERVER on organizer: UID:%s" % (self.attendeePrincipal, self.uid,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "valid-attendee-change")
+ (caldav_namespace, "valid-attendee-change"),
+ "Attendee cannot change organizer state",
))
log.debug("Attendee '%s' is not allowed to update UID: '%s' - missing organizer copy - removing entire event" % (self.attendee, self.uid,))
Modified: CalendarServer/trunk/twistedcaldav/scheduling/ischedule.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/scheduling/ischedule.py 2011-03-13 04:31:12 UTC (rev 7187)
+++ CalendarServer/trunk/twistedcaldav/scheduling/ischedule.py 2011-03-13 04:33:13 UTC (rev 7188)
@@ -92,7 +92,8 @@
# Cannot do server-to-server for this recipient.
err = HTTPError(ErrorResponse(
responsecode.NOT_FOUND,
- (caldav_namespace, "recipient-allowed")
+ (caldav_namespace, "recipient-allowed"),
+ "No server for recipient",
))
self.responses.add(recipient.cuaddr, Failure(exc_value=err), reqstatus=iTIPRequestStatus.NO_USER_SUPPORT)
@@ -103,7 +104,8 @@
# Cannot do server-to-server outgoing requests for this server.
err = HTTPError(ErrorResponse(
responsecode.NOT_FOUND,
- (caldav_namespace, "recipient-allowed")
+ (caldav_namespace, "recipient-allowed"),
+ "Cannot send to recipient's server",
))
self.responses.add(recipient.cuaddr, Failure(exc_value=err), reqstatus=iTIPRequestStatus.SERVICE_UNAVAILABLE)
@@ -177,7 +179,8 @@
for recipient in self.recipients:
err = HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "recipient-failed")
+ (caldav_namespace, "recipient-failed"),
+ "Server-to-server request failed",
))
self.responses.add(recipient.cuaddr, Failure(exc_value=err), reqstatus=iTIPRequestStatus.SERVICE_UNAVAILABLE)
Modified: CalendarServer/trunk/twistedcaldav/scheduling/scheduler.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/scheduling/scheduler.py 2011-03-13 04:31:12 UTC (rev 7187)
+++ CalendarServer/trunk/twistedcaldav/scheduling/scheduler.py 2011-03-13 04:33:13 UTC (rev 7188)
@@ -183,7 +183,8 @@
log.err("%s request must have Originator" % (self.method,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "originator-specified")
+ (caldav_namespace, "originator-specified"),
+ "Missing originator",
))
else:
self.originator = originator
@@ -202,7 +203,8 @@
log.err("%s request must have at least one Recipient" % (self.method,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "recipient-specified")
+ (caldav_namespace, "recipient-specified"),
+ "Must have recipients",
))
else:
self.recipients = list(attendees)
@@ -221,7 +223,8 @@
log.err("%s request must have Originator header" % (self.method,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "originator-specified")
+ (caldav_namespace, "originator-specified"),
+ "Missing originator",
))
else:
self.originator = originator[0]
@@ -233,7 +236,8 @@
log.err("%s request must have at least one Recipient header" % (self.method,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "recipient-specified")
+ (caldav_namespace, "recipient-specified"),
+ "No recipients",
))
# Recipient header may be comma separated list
@@ -252,7 +256,8 @@
log.err("MIME type %s not allowed in calendar collection" % (contentType,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "supported-calendar-data")
+ (caldav_namespace, "supported-calendar-data"),
+ "Data is not calendar data",
))
# Parse the calendar object from the HTTP request stream
@@ -321,7 +326,8 @@
log.err("X-CALENDARSERVER-ACCESS not allowed in a calendar component %s request: %s" % (self.method, self.calendar,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (calendarserver_namespace, "no-access-restrictions")
+ (calendarserver_namespace, "no-access-restrictions"),
+ "Private events cannot be scheduled",
))
# Determine iTIP method mode
@@ -339,7 +345,8 @@
log.err("Wrong number of ATTENDEEs in calendar data: %s" % (self.calendardata,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "attendee-allowed")
+ (caldav_namespace, "attendee-allowed"),
+ "Wrong number of attendees",
))
self.attendee = attendees[0]
@@ -361,7 +368,8 @@
log.err("iTIP data is not valid for a VFREEBUSY request: %s" % (self.calendar,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "valid-calendar-data"), description="iTIP data is not valid for a VFREEBUSY request"
+ (caldav_namespace, "valid-calendar-data"),
+ "iTIP data is not valid for a VFREEBUSY request",
))
dtstart = vfreebusies[0].getStartDateUTC()
dtend = vfreebusies[0].getEndDateUTC()
@@ -370,7 +378,7 @@
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
(caldav_namespace, "valid-calendar-data"),
- description="VFREEBUSY start/end not valid"
+ "VFREEBUSY start/end not valid",
))
# Some clients send floating instead of UTC - coerce to UTC
@@ -379,7 +387,7 @@
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
(caldav_namespace, "valid-calendar-data"),
- description="VFREEBUSY start or end not UTC"
+ "VFREEBUSY start or end not UTC",
))
self.timeRange = caldavxml.TimeRange(start=iCalendarString(dtstart), end=iCalendarString(dtend))
@@ -452,7 +460,8 @@
if freebusy and config.Scheduling.Options.LimitFreeBusyAttendees and ctr >= config.Scheduling.Options.LimitFreeBusyAttendees:
err = HTTPError(ErrorResponse(
responsecode.NOT_FOUND,
- (caldav_namespace, "recipient-limit")
+ (caldav_namespace, "recipient-limit"),
+ "Too many attendees",
))
responses.add(recipient.cuaddr, Failure(exc_value=err), reqstatus=iTIPRequestStatus.SERVICE_UNAVAILABLE)
continue
@@ -475,7 +484,8 @@
else:
err = HTTPError(ErrorResponse(
responsecode.NOT_FOUND,
- (caldav_namespace, "recipient-exists")
+ (caldav_namespace, "recipient-exists"),
+ "Unknown recipient",
))
responses.add(recipient.cuaddr, Failure(exc_value=err), reqstatus=iTIPRequestStatus.INVALID_CALENDAR_USER)
@@ -547,7 +557,8 @@
log.err("Unauthenticated originators not allowed: %s" % (self.originator,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "originator-allowed")
+ (caldav_namespace, "originator-allowed"),
+ "Invalid originator",
))
def checkOriginator(self):
@@ -562,7 +573,8 @@
log.err("Could not find principal for originator: %s" % (self.originator,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "originator-allowed")
+ (caldav_namespace, "originator-allowed"),
+ "No principal for originator",
))
else:
# Must have a valid Inbox.
@@ -571,7 +583,8 @@
log.err("Could not find inbox for originator: %s" % (self.originator,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "originator-allowed")
+ (caldav_namespace, "originator-allowed"),
+ "Originator cannot be scheduled",
))
self.originator = LocalCalendarUser(self.originator, originatorPrincipal)
@@ -628,7 +641,8 @@
log.err("ORGANIZER not allowed to be an Organizer: %s" % (self.calendar,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "organizer-allowed")
+ (caldav_namespace, "organizer-allowed"),
+ "Organizer cannot schedule",
))
self.organizer = LocalCalendarUser(organizer, organizerPrincipal)
@@ -636,7 +650,8 @@
log.err("No outbox for ORGANIZER in calendar data: %s" % (self.calendar,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "organizer-allowed")
+ (caldav_namespace, "organizer-allowed"),
+ "Organizer cannot schedule",
))
else:
localUser = (yield addressmapping.mapper.isCalendarUserInMyDomain(organizer))
@@ -644,7 +659,8 @@
log.err("No principal for ORGANIZER in calendar data: %s" % (self.calendar,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "organizer-allowed")
+ (caldav_namespace, "organizer-allowed"),
+ "No principal for organizer",
))
else:
self.organizer = RemoteCalendarUser(organizer)
@@ -652,7 +668,8 @@
log.err("ORGANIZER missing in calendar data: %s" % (self.calendar,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "organizer-allowed")
+ (caldav_namespace, "organizer-allowed"),
+ "Missing organizer",
))
def checkOrganizerAsOriginator(self):
@@ -662,7 +679,8 @@
log.err("ORGANIZER is not local to server in calendar data: %s" % (self.calendar,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "organizer-allowed")
+ (caldav_namespace, "organizer-allowed"),
+ "Organizer is not local to server",
))
# Make sure that the ORGANIZER's Outbox is the request URI
@@ -670,7 +688,8 @@
log.err("Wrong outbox for ORGANIZER in calendar data: %s" % (self.calendar,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "organizer-allowed")
+ (caldav_namespace, "organizer-allowed"),
+ "Outbox does not belong to organizer",
))
def checkAttendeeAsOriginator(self):
@@ -686,13 +705,15 @@
log.err("ATTENDEE in calendar data does not match owner of Outbox: %s" % (self.calendar,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "attendee-allowed")
+ (caldav_namespace, "attendee-allowed"),
+ "Outbox does not belong to attendee",
))
else:
log.err("Unknown ATTENDEE in calendar data: %s" % (self.calendar,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "attendee-allowed")
+ (caldav_namespace, "attendee-allowed"),
+ "No principal for attendee",
))
def securityChecks(self):
@@ -793,7 +814,8 @@
log.err("Authenticated originators not allowed: %s" % (self.originator,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "originator-allowed")
+ (caldav_namespace, "originator-allowed"),
+ "Authentication not allowed",
))
@inlineCallbacks
@@ -810,7 +832,8 @@
log.err("Cannot use originator that is on this server: %s" % (self.originator,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "originator-allowed")
+ (caldav_namespace, "originator-allowed"),
+ "Originator cannot be local to server",
))
else:
self.originator = PartitionedCalendarUser(self.originator, originatorPrincipal)
@@ -831,7 +854,8 @@
log.err("Originator not on recognized server: %s" % (self.originator,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "originator-allowed")
+ (caldav_namespace, "originator-allowed"),
+ "Originator not recognized by server",
))
else:
# Get the request IP and map to hostname.
@@ -870,7 +894,8 @@
log.err("Originator not on allowed server: %s" % (self.originator,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "originator-allowed")
+ (caldav_namespace, "originator-allowed"),
+ "Originator not allowed to send to this server",
))
def _validPartitionServer(self, principal):
@@ -905,7 +930,8 @@
log.err("Originator not on allowed server: %s" % (self.originator,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "originator-allowed")
+ (caldav_namespace, "originator-allowed"),
+ "Originator not allowed to send to this server",
))
@inlineCallbacks
@@ -923,7 +949,8 @@
log.err("Invalid ORGANIZER in calendar data: %s" % (self.calendar,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "organizer-allowed")
+ (caldav_namespace, "organizer-allowed"),
+ "Organizer is not local to server",
))
else:
# Check that the origin server is the correct partition
@@ -935,7 +962,8 @@
log.err("Unsupported ORGANIZER in calendar data: %s" % (self.calendar,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "organizer-allowed")
+ (caldav_namespace, "organizer-allowed"),
+ "Organizer not allowed to be originator",
))
else:
self.organizer = RemoteCalendarUser(organizer)
@@ -943,7 +971,8 @@
log.err("ORGANIZER missing in calendar data: %s" % (self.calendar,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "organizer-allowed")
+ (caldav_namespace, "organizer-allowed"),
+ "No organizer in calendar data",
))
@inlineCallbacks
@@ -960,7 +989,8 @@
log.err("Invalid ATTENDEE in calendar data: %s" % (self.calendar,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "attendee-allowed")
+ (caldav_namespace, "attendee-allowed"),
+ "Local attendee cannot send to this server",
))
else:
self._validPartitionServer(attendeePrincipal)
@@ -970,7 +1000,8 @@
log.err("Unknown ATTENDEE in calendar data: %s" % (self.calendar,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "attendee-allowed")
+ (caldav_namespace, "attendee-allowed"),
+ "Attendee not allowed to schedule",
))
# TODO: in this case we should check that the ORGANIZER is the sole recipient.
@@ -990,11 +1021,11 @@
yield self.checkAttendeeAsOriginator()
else:
- msg = "Unknown iTIP METHOD for security checks: %s" % (self.calendar.propertyValue("METHOD"),)
- log.err(msg)
+ log.err("Unknown iTIP METHOD for security checks: %s" % (self.calendar.propertyValue("METHOD"),))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "valid-calendar-data"), description=msg
+ (caldav_namespace, "valid-calendar-data"),
+ "Unknown iTIP method",
))
@@ -1042,7 +1073,8 @@
log.err("Cannot use originator that is on this server: %s" % (self.originator,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "originator-allowed")
+ (caldav_namespace, "originator-allowed"),
+ "Originator cannot be local to server",
))
else:
self.originator = RemoteCalendarUser(self.originator)
@@ -1069,7 +1101,8 @@
# TODO: verify this is the right response:
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (caldav_namespace, "originator-allowed")
+ (caldav_namespace, "originator-allowed"),
+ "Originator server not allowed to send to this server",
))
Modified: CalendarServer/trunk/twistedcaldav/sharing.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/sharing.py 2011-03-13 04:31:12 UTC (rev 7187)
+++ CalendarServer/trunk/twistedcaldav/sharing.py 2011-03-13 04:33:13 UTC (rev 7188)
@@ -735,7 +735,8 @@
self.log_error("Error parsing doc (%s) Doc:\n %s" % (str(e), data,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (customxml.calendarserver_namespace, "valid-request")
+ (customxml.calendarserver_namespace, "valid-request"),
+ "Invalid XML",
))
root = doc.root_element
@@ -748,7 +749,8 @@
self.log_error("Unsupported XML (%s)" % (root,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (customxml.calendarserver_namespace, "valid-request")
+ (customxml.calendarserver_namespace, "valid-request"),
+ "Unsupported XML",
))
return allDataFromStream(request.stream).addCallback(_getData)
@@ -761,7 +763,8 @@
return succeed(encoding)
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (customxml.calendarserver_namespace, "valid-request")
+ (customxml.calendarserver_namespace, "valid-request"),
+ "Invalid request content-type",
))
def xmlPOSTAuth(self, request):
@@ -1106,7 +1109,7 @@
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
(customxml.calendarserver_namespace, "valid-request"),
- "invalid shared collection",
+ "Invalid shared collection",
))
# Change the record
@@ -1174,7 +1177,7 @@
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
(customxml.calendarserver_namespace, "valid-request"),
- "missing required XML elements",
+ "Missing required XML elements",
))
if accepted:
return self.acceptInviteShare(request, hostUrl, replytoUID, displayname=summary)
@@ -1198,8 +1201,8 @@
self.log_error("Unsupported XML (%s)" % (root,))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
- (customxml.calendarserver_namespace,
- "valid-request")
+ (customxml.calendarserver_namespace, "valid-request"),
+ "Unsupported XML",
))
return allDataFromStream(request.stream).addCallback(_getData)
Modified: CalendarServer/trunk/twistedcaldav/storebridge.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/storebridge.py 2011-03-13 04:31:12 UTC (rev 7187)
+++ CalendarServer/trunk/twistedcaldav/storebridge.py 2011-03-13 04:33:13 UTC (rev 7188)
@@ -633,7 +633,8 @@
log.err("Cannot DELETE default calendar: %s" % (self,))
raise HTTPError(ErrorResponse(
FORBIDDEN,
- (caldav_namespace, "default-calendar-delete-allowed",)
+ (caldav_namespace, "default-calendar-delete-allowed",),
+ "Cannot delete default calendar",
))
response = (
Modified: CalendarServer/trunk/twistedcaldav/timezoneservice.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/timezoneservice.py 2011-03-13 04:31:12 UTC (rev 7187)
+++ CalendarServer/trunk/twistedcaldav/timezoneservice.py 2011-03-13 04:33:13 UTC (rev 7188)
@@ -146,7 +146,8 @@
if len(method) != 1:
raise HTTPError(ErrorResponse(
responsecode.BAD_REQUEST,
- (calendarserver_namespace, "valid-method")
+ (calendarserver_namespace, "valid-method"),
+ "Invalid method query parameter",
))
method = method[0]
@@ -159,7 +160,8 @@
if action is None:
raise HTTPError(ErrorResponse(
responsecode.BAD_REQUEST,
- (calendarserver_namespace, "supported-method")
+ (calendarserver_namespace, "supported-method"),
+ "Unknown method query parameter",
))
return action(request)
@@ -187,7 +189,8 @@
if len(tzid) != 1:
raise HTTPError(ErrorResponse(
responsecode.BAD_REQUEST,
- (calendarserver_namespace, "valid-timezone")
+ (calendarserver_namespace, "valid-timezone"),
+ "Invalid tzid query parameter",
))
tzid = tzid[0]
@@ -196,7 +199,8 @@
except TimezoneException:
raise HTTPError(ErrorResponse(
responsecode.NOT_FOUND,
- (calendarserver_namespace, "timezone-available")
+ (calendarserver_namespace, "timezone-available"),
+ "Timezone not found",
))
response = Response()
@@ -213,7 +217,8 @@
if len(tzid) != 1:
raise HTTPError(ErrorResponse(
responsecode.BAD_REQUEST,
- (calendarserver_namespace, "valid-timezone")
+ (calendarserver_namespace, "valid-timezone"),
+ "Invalid tzid query parameter",
))
tzid = tzid[0]
try:
@@ -221,7 +226,8 @@
except TimezoneException:
raise HTTPError(ErrorResponse(
responsecode.NOT_FOUND,
- (calendarserver_namespace, "timezone-available")
+ (calendarserver_namespace, "timezone-available"),
+ "Timezone not found",
))
try:
@@ -232,7 +238,8 @@
except ValueError:
raise HTTPError(ErrorResponse(
responsecode.BAD_REQUEST,
- (calendarserver_namespace, "valid-start-date")
+ (calendarserver_namespace, "valid-start-date"),
+ "Invalid start query parameter",
))
try:
@@ -245,7 +252,8 @@
except ValueError:
raise HTTPError(ErrorResponse(
responsecode.BAD_REQUEST,
- (calendarserver_namespace, "valid-end-date")
+ (calendarserver_namespace, "valid-end-date"),
+ "Invalid end query parameter",
))
# Now do the expansion (but use a cache to avoid re-calculating TZs)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20110312/0c415f2a/attachment-0001.html>
More information about the calendarserver-changes
mailing list