[CalendarServer-changes] [2705] CalendarServer/branches/users/cdaboo/trigger-auto-accept-2702

source_changes at macosforge.org source_changes at macosforge.org
Wed Jul 16 10:52:23 PDT 2008


Revision: 2705
          http://trac.macosforge.org/projects/calendarserver/changeset/2705
Author:   cdaboo at apple.com
Date:     2008-07-16 10:52:23 -0700 (Wed, 16 Jul 2008)
Log Message:
-----------
GET on Inbox of an auto-accept calendar user can now be used to trigger auto-accept processing on any
calendar items "stuck" in the inbox.

Modified Paths:
--------------
    CalendarServer/branches/users/cdaboo/trigger-auto-accept-2702/conf/caldavd-test.plist
    CalendarServer/branches/users/cdaboo/trigger-auto-accept-2702/conf/caldavd.plist
    CalendarServer/branches/users/cdaboo/trigger-auto-accept-2702/twistedcaldav/config.py
    CalendarServer/branches/users/cdaboo/trigger-auto-accept-2702/twistedcaldav/schedule.py

Modified: CalendarServer/branches/users/cdaboo/trigger-auto-accept-2702/conf/caldavd-test.plist
===================================================================
--- CalendarServer/branches/users/cdaboo/trigger-auto-accept-2702/conf/caldavd-test.plist	2008-07-16 17:33:20 UTC (rev 2704)
+++ CalendarServer/branches/users/cdaboo/trigger-auto-accept-2702/conf/caldavd-test.plist	2008-07-16 17:52:23 UTC (rev 2705)
@@ -375,7 +375,11 @@
   <key>EnableTimezoneService</key>
   <true/>
 
+  <!-- Manually trigger auto-accept behavior -->
+  <key>EnableAutoAcceptTrigger</key>
+  <false/>
 
+
   <!--
     Twisted
   -->

Modified: CalendarServer/branches/users/cdaboo/trigger-auto-accept-2702/conf/caldavd.plist
===================================================================
--- CalendarServer/branches/users/cdaboo/trigger-auto-accept-2702/conf/caldavd.plist	2008-07-16 17:33:20 UTC (rev 2704)
+++ CalendarServer/branches/users/cdaboo/trigger-auto-accept-2702/conf/caldavd.plist	2008-07-16 17:52:23 UTC (rev 2705)
@@ -340,6 +340,10 @@
   <key>EnableTimezoneService</key>
   <true/>
 
+  <!-- Manually trigger auto-accept behavior -->
+  <key>EnableAutoAcceptTrigger</key>
+  <false/>
 
+
 </dict>
 </plist>

Modified: CalendarServer/branches/users/cdaboo/trigger-auto-accept-2702/twistedcaldav/config.py
===================================================================
--- CalendarServer/branches/users/cdaboo/trigger-auto-accept-2702/twistedcaldav/config.py	2008-07-16 17:33:20 UTC (rev 2704)
+++ CalendarServer/branches/users/cdaboo/trigger-auto-accept-2702/twistedcaldav/config.py	2008-07-16 17:52:23 UTC (rev 2705)
@@ -170,9 +170,10 @@
     #
     # Non-standard CalDAV extensions
     #
-    "EnableDropBox"         : False, # Calendar Drop Box
-    "EnablePrivateEvents"   : False, # Private Events
-    "EnableTimezoneService" : False, # Timezone service
+    "EnableDropBox"           : False, # Calendar Drop Box
+    "EnablePrivateEvents"     : False, # Private Events
+    "EnableTimezoneService"   : False, # Timezone service
+    "EnableAutoAcceptTrigger" : False, # Manually trigger auto-accept behavior
 
     #
     # Notifications

Modified: CalendarServer/branches/users/cdaboo/trigger-auto-accept-2702/twistedcaldav/schedule.py
===================================================================
--- CalendarServer/branches/users/cdaboo/trigger-auto-accept-2702/twistedcaldav/schedule.py	2008-07-16 17:33:20 UTC (rev 2704)
+++ CalendarServer/branches/users/cdaboo/trigger-auto-accept-2702/twistedcaldav/schedule.py	2008-07-16 17:52:23 UTC (rev 2705)
@@ -34,6 +34,7 @@
 from twisted.web2.http_headers import MimeType
 from twisted.web2.dav import davxml
 from twisted.web2.dav.http import ErrorResponse, errorForFailure, messageForFailure, statusForFailure
+from twisted.web2.dav.idav import IDAVResource
 from twisted.web2.dav.resource import AccessDeniedError
 from twisted.web2.dav.util import joinURL
 
@@ -156,6 +157,80 @@
 
         yield super(ScheduleInboxResource, self).writeProperty(property, request)
 
+    @inlineCallbacks
+    def http_GET(self, request):
+        """
+        Special behavior - if the inbox belongs to an auto-accept calendar user, then trigger
+        auto-accept processing on any stored items in the inbox.
+        """
+
+        if config.EnableAutoAcceptTrigger:
+
+            # Look for auto-accept request parameter
+            if request.args:
+                autoaccept = request.args.get("auto-accept", ("",))
+                if len(autoaccept) != 1:
+                    raise HTTPError(ErrorResponse(responsecode.BAD_REQUEST, (calendarserver_namespace, "valid-autoaccept")))
+    
+                # Check authentication and access controls
+                yield self.authorize(request, (davxml.Write(),))
+                
+                # Find out who the inbox belongs to
+                principal = self.parent.principalForRecord()
+        
+                # If they are an auto-accept calendar user, do special processing
+                if principal.autoSchedule() and autoaccept[0].lower() == "true":
+                    
+                    # Now look at each child resource - order by last-modified
+                    children = []
+                    for name, uid, type in self.index().search(None): #@UnusedVariable
+                        try:
+                            child = yield request.locateChildResource(self, name)
+                            child = IDAVResource(child)
+                        except TypeError:
+                            child = None
+        
+                        if child is not None:
+                            # Check privileges of child - skip if access denied
+                            try:
+                                yield child.checkPrivileges(request, (davxml.Write(),))
+                            except AccessDeniedError:
+                                continue
+                            calendar = self.iCalendar(name)
+                            children.append((child, calendar,))
+                            
+                    # Sort by last modified
+                    children.sort(key=lambda x: x[0].lastModified())
+                    
+                    # Now process each one in order
+                    for child, calendar in children:
+                        reactor.callLater(0.0, itip.handleRequest, *(request, principal, self, calendar, child)) #@UndefinedVariable
+    
+                    if (len(children)):
+                        response_text = "Started auto-processing of %d iTIP messages." % (len(children,))
+                    else:
+                        response_text = "There are no iTIP messages to auto-process."
+    
+                else:
+                    response_text = "This calendar user does not auto-accept invites."
+    
+                # Return some useful information
+                response = Response(200, {}, """<html>
+<head>
+<title>Schedule Inbox Auto Processing</title>
+</head>
+<body>
+<h1>%s</h1>
+</body>
+</html>""" % (response_text,)
+                )
+    
+                response.headers.setHeader("content-type", MimeType("text", "html",  {"charset": "utf-8"}))
+                returnValue(response)
+
+        response = (yield super(ScheduleInboxResource, self).http_GET(request))
+        returnValue(response)
+
 class ScheduleOutboxResource (CalendarSchedulingCollectionResource):
     """
     CalDAV schedule Outbox resource.
@@ -322,7 +397,7 @@
             timeRange.start = dtstart
             timeRange.end = dtend
 
-            # Look for maksed UID
+            # Look for masked UID
             excludeUID = calendar.getMaskUID()
 
             # Do free busy operation
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20080716/4fd0b5e8/attachment-0001.html 


More information about the calendarserver-changes mailing list