[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