[CalendarServer-changes] [7158] CalendarServer/trunk/twistedcaldav/directory

source_changes at macosforge.org source_changes at macosforge.org
Tue Mar 8 17:15:27 PST 2011


Revision: 7158
          http://trac.macosforge.org/projects/calendarserver/changeset/7158
Author:   sagen at apple.com
Date:     2011-03-08 17:15:26 -0800 (Tue, 08 Mar 2011)
Log Message:
-----------
Handle non-ascii principal urls

Modified Paths:
--------------
    CalendarServer/trunk/twistedcaldav/directory/principal.py
    CalendarServer/trunk/twistedcaldav/directory/test/accounts.xml
    CalendarServer/trunk/twistedcaldav/directory/test/test_principal.py
    CalendarServer/trunk/twistedcaldav/directory/test/test_proxyprincipalmembers.py
    CalendarServer/trunk/twistedcaldav/directory/xmlfile.py

Modified: CalendarServer/trunk/twistedcaldav/directory/principal.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/principal.py	2011-03-09 00:37:33 UTC (rev 7157)
+++ CalendarServer/trunk/twistedcaldav/directory/principal.py	2011-03-09 01:15:26 UTC (rev 7158)
@@ -992,7 +992,8 @@
             return self
 
         if config.EnableProxyPrincipals and name in ("calendar-proxy-read", "calendar-proxy-write"):
-            return CalendarUserProxyPrincipalResource(self, name)
+            # name is required to be str
+            return CalendarUserProxyPrincipalResource(self, str(name))
         else:
             return None
 

Modified: CalendarServer/trunk/twistedcaldav/directory/test/accounts.xml
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/test/accounts.xml	2011-03-09 00:37:33 UTC (rev 7157)
+++ CalendarServer/trunk/twistedcaldav/directory/test/accounts.xml	2011-03-09 01:15:26 UTC (rev 7158)
@@ -95,6 +95,14 @@
     <name>a adbkonly</name>
     <email-address>a-adbkonly at example.com</email-address>
   </user>
+  <user>
+    <uid>nonascii</uid>
+    <uid>nonascii佐藤</uid>
+    <guid>320B73A1-46E2-4180-9563-782DFDBE1F63</guid>
+    <password>a</password>
+    <name>佐藤佐藤佐藤</name>
+    <email-address>nonascii at example.com</email-address>
+  </user>
   <user repeat="2">
     <uid>user%02d</uid>
     <guid>user%02d</guid>

Modified: CalendarServer/trunk/twistedcaldav/directory/test/test_principal.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/test/test_principal.py	2011-03-09 00:37:33 UTC (rev 7157)
+++ CalendarServer/trunk/twistedcaldav/directory/test/test_principal.py	2011-03-09 01:15:26 UTC (rev 7158)
@@ -42,8 +42,10 @@
 import twistedcaldav.test.util
 
 from txdav.common.datastore.file import CommonDataStore
+from urllib import quote
 
 
+
 class ProvisionedPrincipals (twistedcaldav.test.util.TestCase):
     """
     Directory service provisioned principals.
@@ -115,14 +117,19 @@
                 self.assertEquals(set((provisioningURL,)), set(pc.principalCollectionURL() for pc in principalCollections))
 
                 shortNames = set((yield typeResource.listChildren()))
-                self.assertEquals(shortNames, set(r.shortNames[0] for r in directory.listRecords(recordType)))
+                # Handle records with mulitple shortNames
+                expected = []
+                for r in directory.listRecords(recordType):
+                    expected.extend(r.shortNames)
+                self.assertEquals(shortNames, set(expected))
 
                 for shortName in shortNames:
                     #print "     -> %s" % (shortName,)
                     recordResource = typeResource.getChild(shortName)
                     self.failUnless(isinstance(recordResource, DirectoryPrincipalResource))
 
-                    recordURL = typeURL + shortName + "/"
+                    # shortName may be non-ascii
+                    recordURL = typeURL + quote(shortName) + "/"
                     self.assertIn(recordURL, (recordResource.principalURL(),) + tuple(recordResource.alternateURIs()))
 
                     principalCollections = recordResource.principalCollections()

Modified: CalendarServer/trunk/twistedcaldav/directory/test/test_proxyprincipalmembers.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/test/test_proxyprincipalmembers.py	2011-03-09 00:37:33 UTC (rev 7157)
+++ CalendarServer/trunk/twistedcaldav/directory/test/test_proxyprincipalmembers.py	2011-03-09 01:15:26 UTC (rev 7158)
@@ -547,3 +547,25 @@
 
                 yield self._clearProxy(principal, proxyType)
                 yield self._clearProxy(fakePrincipal, proxyType)
+
+
+    @inlineCallbacks
+    def test_NonAsciiProxy(self):
+        """
+        Ensure that principalURLs with non-ascii don't cause problems
+        within CalendarUserProxyPrincipalResource
+        """
+
+        recordType = DirectoryService.recordType_users
+        proxyType = "calendar-proxy-read"
+
+        record = self.directoryService.recordWithGUID("320B73A1-46E2-4180-9563-782DFDBE1F63")
+        provisioningResource = self.principalRootResources[self.directoryService.__class__.__name__]
+        principal =  provisioningResource.principalForRecord(record)
+        proxyPrincipal = provisioningResource.principalForShortName(recordType,
+            "wsanchez")
+
+        yield self._addProxy(principal, proxyType, proxyPrincipal)
+        memberships = yield proxyPrincipal._calendar_user_proxy_index().getMemberships(proxyPrincipal.principalUID())
+        for uid in memberships:
+            subPrincipal = provisioningResource.principalForUID(uid)

Modified: CalendarServer/trunk/twistedcaldav/directory/xmlfile.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/xmlfile.py	2011-03-09 00:37:33 UTC (rev 7157)
+++ CalendarServer/trunk/twistedcaldav/directory/xmlfile.py	2011-03-09 01:15:26 UTC (rev 7158)
@@ -358,7 +358,7 @@
 
         element = addSubElement(parent, xmlType)
         for value in principal.shortNames:
-            addSubElement(element, "uid", text=value)
+            addSubElement(element, "uid", text=value.decode("utf-8"))
         addSubElement(element, "guid", text=principal.guid)
         if principal.fullName is not None:
             addSubElement(element, "name", text=principal.fullName.decode("utf-8"))
@@ -367,11 +367,11 @@
         if principal.lastName is not None:
             addSubElement(element, "last-name", text=principal.lastName.decode("utf-8"))
         for value in principal.emailAddresses:
-            addSubElement(element, "email-address", text=value)
+            addSubElement(element, "email-address", text=value.decode("utf-8"))
         if principal.extras:
             extrasElement = addSubElement(element, "extras")
             for key, value in principal.extras.iteritems():
-                addSubElement(extrasElement, key, text=value)
+                addSubElement(extrasElement, key, text=value.decode("utf-8"))
 
         return element
 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20110308/707b0813/attachment-0001.html>


More information about the calendarserver-changes mailing list