[CalendarServer-changes] [4913] CalendarServer/trunk
source_changes at macosforge.org
source_changes at macosforge.org
Thu Jan 7 10:53:48 PST 2010
Revision: 4913
http://trac.macosforge.org/projects/calendarserver/changeset/4913
Author: cdaboo at apple.com
Date: 2010-01-07 10:53:47 -0800 (Thu, 07 Jan 2010)
Log Message:
-----------
Support for SCHEDULE-AGENT on Organizer.
Modified Paths:
--------------
CalendarServer/trunk/support/build.sh
CalendarServer/trunk/twistedcaldav/ical.py
CalendarServer/trunk/twistedcaldav/scheduling/implicit.py
Modified: CalendarServer/trunk/support/build.sh
===================================================================
--- CalendarServer/trunk/support/build.sh 2010-01-07 18:50:45 UTC (rev 4912)
+++ CalendarServer/trunk/support/build.sh 2010-01-07 18:53:47 UTC (rev 4913)
@@ -496,7 +496,7 @@
false true true true 212;
# Tool dependencies. The code itself doesn't depend on these, but you probably want them.
- svn_get "CalDAVTester" "${top}/CalDAVTester" "${svn_uri_base}/CalDAVTester/trunk" 4906;
+ svn_get "CalDAVTester" "${top}/CalDAVTester" "${svn_uri_base}/CalDAVTester/trunk" 4912;
svn_get "Pyflakes" "${top}/Pyflakes" http://divmod.org/svn/Divmod/trunk/Pyflakes 17198;
}
Modified: CalendarServer/trunk/twistedcaldav/ical.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/ical.py 2010-01-07 18:50:45 UTC (rev 4912)
+++ CalendarServer/trunk/twistedcaldav/ical.py 2010-01-07 18:53:47 UTC (rev 4913)
@@ -1511,6 +1511,18 @@
return None
+ def getOrganizerScheduleAgent(self):
+
+ is_server = False
+ organizerProp = self.getOrganizerProperty()
+ if "SCHEDULE-AGENT" in organizerProp.params():
+ if organizerProp.paramValue("SCHEDULE-AGENT") == "SERVER":
+ is_server = True
+ else:
+ is_server = True
+
+ return is_server
+
def getAttendees(self):
"""
Get the attendee value. Works on either a VCALENDAR or on a component.
Modified: CalendarServer/trunk/twistedcaldav/scheduling/implicit.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/scheduling/implicit.py 2010-01-07 18:50:45 UTC (rev 4912)
+++ CalendarServer/trunk/twistedcaldav/scheduling/implicit.py 2010-01-07 18:53:47 UTC (rev 4913)
@@ -760,13 +760,19 @@
if not self.internal_request:
yield self.doAccessControl(self.attendeePrincipal, False)
+ # Check SCHEDULE-AGENT
+ doScheduling = self.checkOrganizerScheduleAgent()
+
if self.action == "remove":
if self.calendar.hasPropertyValueInAllComponents(Property("STATUS", "CANCELLED")):
log.debug("Implicit - attendee '%s' is removing cancelled UID: '%s'" % (self.attendee, self.uid))
# Nothing else to do
- else:
+ elif doScheduling:
log.debug("Implicit - attendee '%s' is cancelling UID: '%s'" % (self.attendee, self.uid))
yield self.scheduleCancelWithOrganizer()
+ else:
+ log.debug("Implicit - attendee '%s' is removing UID without server scheduling: '%s'" % (self.attendee, self.uid))
+ # Nothing else to do
else:
# Make sure ORGANIZER is not changed
@@ -833,9 +839,30 @@
log.debug("Attendee '%s' is allowed to update UID: '%s' with remote organizer '%s'" % (self.attendee, self.uid, self.organizer))
changedRids = None
- log.debug("Implicit - attendee '%s' is updating UID: '%s'" % (self.attendee, self.uid))
- yield self.scheduleWithOrganizer(changedRids)
+ if doScheduling:
+ log.debug("Implicit - attendee '%s' is updating UID: '%s'" % (self.attendee, self.uid))
+ yield self.scheduleWithOrganizer(changedRids)
+ else:
+ log.debug("Implicit - attendee '%s' is updating UID without server scheduling: '%s'" % (self.attendee, self.uid))
+ # Nothing else to do
+ def checkOrganizerScheduleAgent(self):
+
+ is_server = self.calendar.getOrganizerScheduleAgent()
+ local_organizer = isinstance(self.organizerAddress, LocalCalendarUser)
+
+ 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:
+ # 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)
+ self.calendar.setParameterToValueForPropertyWithValue("SCHEDULE-STATUS", iTIPRequestStatus.NO_USER_SUPPORT_CODE, "ORGANIZER", None)
+ is_server = False
+
+ return is_server
+
@inlineCallbacks
def getOrganizersCopy(self):
"""
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20100107/b5867430/attachment.html>
More information about the calendarserver-changes
mailing list