[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