[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