[CalendarServer-changes] [5675] CalendarServer/trunk/twistedcaldav/scheduling/implicit.py

source_changes at macosforge.org source_changes at macosforge.org
Thu Jun 3 12:31:27 PDT 2010


Revision: 5675
          http://trac.macosforge.org/projects/calendarserver/changeset/5675
Author:   cdaboo at apple.com
Date:     2010-06-03 12:31:24 -0700 (Thu, 03 Jun 2010)
Log Message:
-----------
Support SCHEDULE-AGENT=CLIENT on local ORGANIZER.

Modified Paths:
--------------
    CalendarServer/trunk/twistedcaldav/scheduling/implicit.py

Modified: CalendarServer/trunk/twistedcaldav/scheduling/implicit.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/scheduling/implicit.py	2010-06-03 19:30:14 UTC (rev 5674)
+++ CalendarServer/trunk/twistedcaldav/scheduling/implicit.py	2010-06-03 19:31:24 UTC (rev 5675)
@@ -807,7 +807,8 @@
             else:
                 log.debug("Implicit - attendee '%s' is removing UID without server scheduling: '%s'" % (self.attendee, self.uid))
                 # Nothing else to do
-        
+            returnValue(None)
+
         else:
             # Make sure ORGANIZER is not changed
             if self.resource.exists():
@@ -824,6 +825,11 @@
             yield self.getOrganizersCopy()
             if self.organizer_calendar:
 
+                # If Organizer copy exists we cannot allow SCHEDULE-AGENT=CLIENT or NONE
+                if not doScheduling:
+                    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")))
+
                 # Determine whether the current change is allowed
                 changeAllowed, doITipReply, changedRids, newCalendar = self.isAttendeeChangeInsignificant()
                 if changeAllowed:
@@ -844,14 +850,27 @@
                 log.debug("Attendee '%s' is allowed to update UID: '%s' with local organizer '%s'" % (self.attendee, self.uid, self.organizer))
 
             elif isinstance(self.organizerAddress, LocalCalendarUser):
-                # Check to see whether all instances are CANCELLED
-                if self.calendar.hasPropertyValueInAllComponents(Property("STATUS", "CANCELLED")):
-                    log.debug("Attendee '%s' is creating CANCELLED event for missing UID: '%s' - removing entire event" % (self.attendee, self.uid,))
-                    self.return_status = ImplicitScheduler.STATUS_ORPHANED_CANCELLED_EVENT
-                    returnValue(None)
+                # If Organizer copy does not exists we cannot allow SCHEDULE-AGENT=SERVER
+                if doScheduling:
+                    # Check to see whether all instances are CANCELLED
+                    if self.calendar.hasPropertyValueInAllComponents(Property("STATUS", "CANCELLED")):
+                        log.debug("Attendee '%s' is creating CANCELLED event for missing UID: '%s' - removing entire event" % (self.attendee, self.uid,))
+                        self.return_status = ImplicitScheduler.STATUS_ORPHANED_CANCELLED_EVENT
+                        returnValue(None)
+                    else:
+                        # Check to see whether existing event is SCHEDULE-AGENT=CLIENT/NONE
+                        if self.oldcalendar:
+                            oldScheduling = self.oldcalendar.getOrganizerScheduleAgent()
+                            if not oldScheduling:
+                                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")))
+
+                        log.debug("Attendee '%s' is not allowed to update UID: '%s' - missing organizer copy - removing entire event" % (self.attendee, self.uid,))
+                        self.return_status = ImplicitScheduler.STATUS_ORPHANED_EVENT
+                        returnValue(None)
                 else:
-                    log.debug("Attendee '%s' is not allowed to update UID: '%s' - missing organizer copy - removing entire event" % (self.attendee, self.uid,))
-                    self.return_status = ImplicitScheduler.STATUS_ORPHANED_EVENT
+                    log.debug("Implicit - attendee '%s' is modifying UID without server scheduling: '%s'" % (self.attendee, self.uid))
+                    # Nothing else to do
                     returnValue(None)
 
             elif isinstance(self.organizerAddress, InvalidCalendarUser):
@@ -889,10 +908,7 @@
         if config.Scheduling.iMIP.Enabled and self.organizerAddress.cuaddr.startswith("mailto:"):
             return True
 
-        if local_organizer and not is_server:
-            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")))
-        elif not local_organizer and is_server:
+        if not local_organizer and is_server:
             # Coerce ORGANIZER to SCHEDULE-AGENT=NONE
             log.debug("Attendee '%s' is not allowed to use SCHEDULE-AGENT=SERVER on organizer: UID:%s" % (self.attendeePrincipal, self.uid,))
             self.calendar.setParameterToValueForPropertyWithValue("SCHEDULE-AGENT", "NONE", "ORGANIZER", None)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20100603/7311ac62/attachment.html>


More information about the calendarserver-changes mailing list