[CalendarServer-changes] [3409] CalendarServer/trunk/twistedcaldav
source_changes at macosforge.org
source_changes at macosforge.org
Tue Nov 25 08:47:05 PST 2008
Revision: 3409
http://trac.macosforge.org/projects/calendarserver/changeset/3409
Author: cdaboo at apple.com
Date: 2008-11-25 08:47:04 -0800 (Tue, 25 Nov 2008)
Log Message:
-----------
Remove requirement for Originator/Recipient headers when doing "internal" CalDAV scheduling.
Modified Paths:
--------------
CalendarServer/trunk/twistedcaldav/mail.py
CalendarServer/trunk/twistedcaldav/schedule.py
CalendarServer/trunk/twistedcaldav/scheduling/scheduler.py
Modified: CalendarServer/trunk/twistedcaldav/mail.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/mail.py 2008-11-24 04:50:05 UTC (rev 3408)
+++ CalendarServer/trunk/twistedcaldav/mail.py 2008-11-25 16:47:04 UTC (rev 3409)
@@ -221,7 +221,7 @@
scheduler = IMIPScheduler(request, self)
# Do the POST processing treating this as a non-local schedule
- result = (yield scheduler.doSchedulingViaPOST())
+ result = (yield scheduler.doSchedulingViaPOST(use_request_headers=True))
returnValue(result.response())
##
Modified: CalendarServer/trunk/twistedcaldav/schedule.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/schedule.py 2008-11-24 04:50:05 UTC (rev 3408)
+++ CalendarServer/trunk/twistedcaldav/schedule.py 2008-11-25 16:47:04 UTC (rev 3409)
@@ -313,5 +313,5 @@
scheduler = IScheduleScheduler(request, self)
# Do the POST processing treating this as a non-local schedule
- result = (yield scheduler.doSchedulingViaPOST())
+ result = (yield scheduler.doSchedulingViaPOST(use_request_headers=True))
returnValue(result.response())
Modified: CalendarServer/trunk/twistedcaldav/scheduling/scheduler.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/scheduling/scheduler.py 2008-11-24 04:50:05 UTC (rev 3408)
+++ CalendarServer/trunk/twistedcaldav/scheduling/scheduler.py 2008-11-25 16:47:04 UTC (rev 3409)
@@ -74,7 +74,7 @@
self.internal_request = False
@inlineCallbacks
- def doSchedulingViaPOST(self):
+ def doSchedulingViaPOST(self, use_request_headers=False):
"""
The Scheduling POST operation on an Outbox.
"""
@@ -82,9 +82,12 @@
self.method = "POST"
# Load various useful bits doing some basic checks on those
- self.loadOriginatorFromRequestHeaders()
- self.loadRecipientsFromRequestHeaders()
yield self.loadCalendarFromRequest()
+
+ if use_request_headers:
+ self.loadFromRequestHeaders()
+ else:
+ yield self.loadFromRequestData()
# Do some extra authorization checks
self.checkAuthorization()
@@ -138,6 +141,56 @@
returnValue(result)
+ @inlineCallbacks
+ def loadFromRequestData(self):
+ yield self.loadOriginatorFromRequestDetails()
+ self.loadRecipientsFromCalendarData()
+
+ @inlineCallbacks
+ def loadOriginatorFromRequestDetails(self):
+ # Get the originator who is the authenticated user
+ originatorPrincipal = None
+ originator = ""
+ authz_principal = self.resource.currentPrincipal(self.request).children[0]
+ if isinstance(authz_principal, davxml.HRef):
+ originatorPrincipalURL = str(authz_principal)
+ if originatorPrincipalURL:
+ originatorPrincipal = (yield self.request.locateResource(originatorPrincipalURL))
+ if originatorPrincipal:
+ # Pick the first mailto cu address or the first other type
+ for item in originatorPrincipal.calendarUserAddresses():
+ if not originator:
+ originator = item
+ if item.startswith("mailto:"):
+ originator = item
+ break
+
+ if not originator:
+ log.err("%s request must have Originator" % (self.method,))
+ raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "originator-specified")))
+ else:
+ self.originator = originator
+
+ def loadRecipientsFromCalendarData(self):
+
+ # Get the ATTENDEEs
+ attendees = set()
+ for attendee, _ignore in self.calendar.getAttendeesByInstance():
+ attendees.add(attendee)
+
+ if not attendees:
+ log.err("%s request must have at least one Recipient" % (self.method,))
+ raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "recipient-specified")))
+ else:
+ self.recipients = list(attendees)
+
+ def loadFromRequestHeaders(self):
+ """
+ Load Originator and Recipient from request headers.
+ """
+ self.loadOriginatorFromRequestHeaders()
+ self.loadRecipientsFromRequestHeaders()
+
def loadOriginatorFromRequestHeaders(self):
# Must have Originator header
originator = self.request.headers.getRawHeaders("originator")
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20081125/0dc446e2/attachment.html>
More information about the calendarserver-changes
mailing list