[CalendarServer-changes] [4397] CalendarServer/trunk/twistedcaldav

source_changes at macosforge.org source_changes at macosforge.org
Tue Jun 30 11:26:50 PDT 2009


Revision: 4397
          http://trac.macosforge.org/projects/calendarserver/changeset/4397
Author:   cdaboo at apple.com
Date:     2009-06-30 11:26:50 -0700 (Tue, 30 Jun 2009)
Log Message:
-----------
If the organizer's copy of the event is missing we now remove the attendee's copy rather than returning a 403. That
way the server "heals" itself.

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

Modified: CalendarServer/trunk/twistedcaldav/method/put_common.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/method/put_common.py	2009-06-30 16:56:46 UTC (rev 4396)
+++ CalendarServer/trunk/twistedcaldav/method/put_common.py	2009-06-30 18:26:50 UTC (rev 4397)
@@ -62,6 +62,7 @@
     InvalidOverriddenInstanceError
 from twistedcaldav.log import Logger
 from twistedcaldav.memcachelock import MemcacheLock, MemcacheLockTimeoutError
+from twistedcaldav.method.delete_common import DeleteResource
 from twistedcaldav.scheduling.implicit import ImplicitScheduler
 
 log = Logger()
@@ -971,6 +972,17 @@
                         yield reservation.unreserve()
             
                     returnValue(StatusResponse(responsecode.CREATED, "Resource created but immediately deleted by the server."))
+
+                elif implicit_result == ImplicitScheduler.STATUS_ORPHANED_EVENT:
+                    if reservation:
+                        yield reservation.unreserve()
+            
+                    # Now forcibly delete the event
+                    deleter = DeleteResource(self.request, self.destination, self.destination_uri, self.destinationparent, "0", internal_request=True)
+                    yield deleter.run()
+
+                    returnValue(StatusResponse(responsecode.OK, "Resource modified but immediately deleted by the server."))
+
                 else:
                     msg = "Invalid return status code from ImplicitScheduler: %s" % (implicit_result,)
                     log.err(msg)

Modified: CalendarServer/trunk/twistedcaldav/scheduling/implicit.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/scheduling/implicit.py	2009-06-30 16:56:46 UTC (rev 4396)
+++ CalendarServer/trunk/twistedcaldav/scheduling/implicit.py	2009-06-30 18:26:50 UTC (rev 4397)
@@ -54,6 +54,7 @@
     # Return Status codes
     STATUS_OK                       = 0
     STATUS_ORPHANED_CANCELLED_EVENT = 1
+    STATUS_ORPHANED_EVENT           = 2
 
     def __init__(self):
         
@@ -792,8 +793,9 @@
                     self.return_status = ImplicitScheduler.STATUS_ORPHANED_CANCELLED_EVENT
                     returnValue(None)
                 else:
-                    log.debug("Attendee '%s' is not allowed to update UID: '%s' - missing organizer copy" % (self.attendee, 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)
             elif isinstance(self.organizerAddress, InvalidCalendarUser):
                 log.debug("Attendee '%s' is not allowed to update UID: '%s' with invalid organizer '%s'" % (self.attendee, self.uid, self.organizer))
                 raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-attendee-change")))
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20090630/9377d8a3/attachment-0001.html>


More information about the calendarserver-changes mailing list