[CalendarServer-changes] [5241] CalendarServer/branches/users/cdaboo/shared-calendars-5187/ twistedcaldav

source_changes at macosforge.org source_changes at macosforge.org
Thu Mar 4 09:08:43 PST 2010


Revision: 5241
          http://trac.macosforge.org/projects/calendarserver/changeset/5241
Author:   cdaboo at apple.com
Date:     2010-03-04 09:08:42 -0800 (Thu, 04 Mar 2010)
Log Message:
-----------
Don't allow an "upgrade" to a shared calendar if shared-scheduling is not supported.

Modified Paths:
--------------
    CalendarServer/branches/users/cdaboo/shared-calendars-5187/twistedcaldav/sharing.py
    CalendarServer/branches/users/cdaboo/shared-calendars-5187/twistedcaldav/test/test_sharing.py

Modified: CalendarServer/branches/users/cdaboo/shared-calendars-5187/twistedcaldav/sharing.py
===================================================================
--- CalendarServer/branches/users/cdaboo/shared-calendars-5187/twistedcaldav/sharing.py	2010-03-04 16:47:59 UTC (rev 5240)
+++ CalendarServer/branches/users/cdaboo/shared-calendars-5187/twistedcaldav/sharing.py	2010-03-04 17:08:42 UTC (rev 5241)
@@ -14,9 +14,9 @@
 # limitations under the License.
 ##
 from twisted.internet.defer import succeed, inlineCallbacks, DeferredList,\
-    returnValue
+    returnValue, fail
 from twext.web2 import responsecode
-from twext.web2.http import HTTPError, Response
+from twext.web2.http import HTTPError, Response, StatusResponse
 from twext.web2.dav.http import ErrorResponse, MultiStatusResponse
 from twext.web2.dav.util import allDataFromStream
 from twext.web2.dav.element.base import PCDATAElement
@@ -61,6 +61,10 @@
     def upgradeToShare(self, request):
         """ Upgrade this collection to a shared state """
         
+        # For calendars we only allow upgrades is shared-scheduling is on
+        if request.method not in ("MKCALENDAR", "MKCOL") and self.isCalendarCollection() and not config.Sharing.Calendars.AllowScheduling:
+            raise HTTPError(StatusResponse(responsecode.FORBIDDEN, "Cannot upgrade to shared calendar"))
+
         # Change resourcetype
         rtype = self.resourceType()
         rtype = davxml.ResourceType(*(rtype.children + (customxml.SharedOwner(),)))
@@ -295,9 +299,11 @@
 
             def _autoShare(isShared, request):
                 if not isShared:
-                    return self.upgradeToShare(request)
+                    if not self.isCalendarCollection() or config.Sharing.Calendars.AllowScheduling:
+                        return self.upgradeToShare(request)
                 else:
                     return succeed(True)
+                return fail()
 
             @inlineCallbacks
             def _processInviteDoc(_, request):

Modified: CalendarServer/branches/users/cdaboo/shared-calendars-5187/twistedcaldav/test/test_sharing.py
===================================================================
--- CalendarServer/branches/users/cdaboo/shared-calendars-5187/twistedcaldav/test/test_sharing.py	2010-03-04 16:47:59 UTC (rev 5240)
+++ CalendarServer/branches/users/cdaboo/shared-calendars-5187/twistedcaldav/test/test_sharing.py	2010-03-04 17:08:42 UTC (rev 5241)
@@ -27,6 +27,7 @@
 from twistedcaldav.test.util import InMemoryPropertyStore
 from twistedcaldav.test.util import TestCase
 import os
+from twext.web2.http import HTTPError
 
 
 class SharingTests(TestCase):
@@ -39,6 +40,7 @@
         os.mkdir(collection)
         self.resource = CalDAVFile(collection, self.site.resource)
         self.resource._dead_properties = InMemoryPropertyStore()
+        self.resource.writeDeadProperty(davxml.ResourceType.calendar)
         self.site.resource.putChild("calendar", self.resource)
         
         self.resource.validUserIDForShare = self._fakeValidUserID
@@ -74,24 +76,44 @@
         return xml
 
     @inlineCallbacks
-    def test_upgradeToShare(self):
-        self.resource.writeDeadProperty(davxml.ResourceType.calendar)
+    def test_upgradeToShareOnCreate(self):
+        request = SimpleRequest(self.site, "MKCOL", "/calendar/")
+
         self.assertEquals(self.resource.resourceType(), davxml.ResourceType.calendar)
-        propInvite = (yield self.resource.readProperty(customxml.Invite, None))
+        propInvite = (yield self.resource.readProperty(customxml.Invite, request))
         self.assertEquals(propInvite, None)
 
-        yield self.resource.upgradeToShare(None)
+        yield self.resource.upgradeToShare(request)
 
         self.assertEquals(self.resource.resourceType(), davxml.ResourceType.sharedcalendar)
-        propInvite = (yield self.resource.readProperty(customxml.Invite, None))
+        propInvite = (yield self.resource.readProperty(customxml.Invite, request))
         self.assertEquals(propInvite, customxml.Invite())
         
-        isShared = (yield self.resource.isShared(None))
+        isShared = (yield self.resource.isShared(request))
         self.assertTrue(isShared)
-        isVShared = (yield self.resource.isVirtualShare(None))
+        isVShared = (yield self.resource.isVirtualShare(request))
         self.assertFalse(isVShared)
 
     @inlineCallbacks
+    def test_upgradeToShareAfterCreate(self):
+        request = SimpleRequest(self.site, "PROPPATCH", "/calendar/")
+
+        self.assertEquals(self.resource.resourceType(), davxml.ResourceType.calendar)
+        propInvite = (yield self.resource.readProperty(customxml.Invite, request))
+        self.assertEquals(propInvite, None)
+
+        self.assertRaises(HTTPError, self.resource.upgradeToShare, request)
+
+        self.assertEquals(self.resource.resourceType(), davxml.ResourceType.calendar)
+        propInvite = (yield self.resource.readProperty(customxml.Invite, request))
+        self.assertEquals(propInvite, None)
+        
+        isShared = (yield self.resource.isShared(request))
+        self.assertFalse(isShared)
+        isVShared = (yield self.resource.isVirtualShare(request))
+        self.assertFalse(isVShared)
+
+    @inlineCallbacks
     def test_downgradeFromShare(self):
         self.resource.writeDeadProperty(davxml.ResourceType.sharedcalendar)
         self.resource.writeDeadProperty(customxml.Invite())
@@ -113,7 +135,7 @@
     @inlineCallbacks
     def test_POSTaddInviteeAlreadyShared(self):
         
-        yield self.resource.upgradeToShare(None)
+        yield self.resource.upgradeToShare(SimpleRequest(self.site, "MKCOL", "/calendar/"))
 
         yield self._doPOST("""<?xml version="1.0" encoding="utf-8" ?>
 <CS:share xmlns:D="DAV:" xmlns:CS="http://calendarserver.org/ns/">
@@ -151,27 +173,22 @@
         <CS:read-write/>
     </CS:set>
 </CS:share>
-""")
+""",
+            responsecode.BAD_REQUEST
+        )
 
         propInvite = (yield self.resource.readProperty(customxml.Invite, None))
-        self.assertEquals(self._clearUIDElementValue(propInvite), customxml.Invite(
-            customxml.InviteUser(
-                customxml.UID.fromString(""),
-                davxml.HRef.fromString("mailto:user02 at example.com"),
-                customxml.InviteAccess(customxml.ReadWriteAccess()),
-                customxml.InviteStatusNoResponse(),
-            )
-        ))
+        self.assertEquals(propInvite, None)
         
         isShared = (yield self.resource.isShared(None))
-        self.assertTrue(isShared)
+        self.assertFalse(isShared)
         isVShared = (yield self.resource.isVirtualShare(None))
         self.assertFalse(isVShared)
 
     @inlineCallbacks
     def test_POSTupdateInvitee(self):
         
-        yield self.resource.upgradeToShare(None)
+        yield self.resource.upgradeToShare(SimpleRequest(self.site, "MKCOL", "/calendar/"))
 
         yield self._doPOST("""<?xml version="1.0" encoding="utf-8" ?>
 <CS:share xmlns:D="DAV:" xmlns:CS="http://calendarserver.org/ns/">
@@ -206,7 +223,7 @@
     @inlineCallbacks
     def test_POSTremoveInvitee(self):
         
-        yield self.resource.upgradeToShare(None)
+        yield self.resource.upgradeToShare(SimpleRequest(self.site, "MKCOL", "/calendar/"))
 
         yield self._doPOST("""<?xml version="1.0" encoding="utf-8" ?>
 <CS:share xmlns:D="DAV:" xmlns:CS="http://calendarserver.org/ns/">
@@ -232,7 +249,7 @@
     @inlineCallbacks
     def test_POSTaddMoreInvitees(self):
         
-        yield self.resource.upgradeToShare(None)
+        yield self.resource.upgradeToShare(SimpleRequest(self.site, "MKCOL", "/calendar/"))
 
         yield self._doPOST("""<?xml version="1.0" encoding="utf-8" ?>
 <CS:share xmlns:D="DAV:" xmlns:CS="http://calendarserver.org/ns/">
@@ -283,7 +300,7 @@
     @inlineCallbacks
     def test_POSTaddRemoveInvitees(self):
         
-        yield self.resource.upgradeToShare(None)
+        yield self.resource.upgradeToShare(SimpleRequest(self.site, "MKCOL", "/calendar/"))
 
         yield self._doPOST("""<?xml version="1.0" encoding="utf-8" ?>
 <CS:share xmlns:D="DAV:" xmlns:CS="http://calendarserver.org/ns/">
@@ -331,7 +348,7 @@
     @inlineCallbacks
     def test_POSTaddRemoveSameInvitee(self):
         
-        yield self.resource.upgradeToShare(None)
+        yield self.resource.upgradeToShare(SimpleRequest(self.site, "MKCOL", "/calendar/"))
 
         yield self._doPOST("""<?xml version="1.0" encoding="utf-8" ?>
 <CS:share xmlns:D="DAV:" xmlns:CS="http://calendarserver.org/ns/">
@@ -379,7 +396,7 @@
     @inlineCallbacks
     def test_POSTaddInvalidInvitee(self):
         
-        yield self.resource.upgradeToShare(None)
+        yield self.resource.upgradeToShare(SimpleRequest(self.site, "MKCOL", "/calendar/"))
 
         response = (yield self._doPOST("""<?xml version="1.0" encoding="utf-8" ?>
 <CS:share xmlns:D="DAV:" xmlns:CS="http://calendarserver.org/ns/">
@@ -409,7 +426,7 @@
     @inlineCallbacks
     def test_POSTremoveInvalidInvitee(self):
         
-        yield self.resource.upgradeToShare(None)
+        yield self.resource.upgradeToShare(SimpleRequest(self.site, "MKCOL", "/calendar/"))
 
         yield self._doPOST("""<?xml version="1.0" encoding="utf-8" ?>
 <CS:share xmlns:D="DAV:" xmlns:CS="http://calendarserver.org/ns/">
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20100304/874cee3a/attachment-0001.html>


More information about the calendarserver-changes mailing list