[CalendarServer-changes] [12814] CalendarServer/branches/release/CalendarServer-5.2-dev/ twistedcaldav/directory

source_changes at macosforge.org source_changes at macosforge.org
Wed Mar 5 07:40:18 PST 2014


Revision: 12814
          http://trac.calendarserver.org//changeset/12814
Author:   cdaboo at apple.com
Date:     2014-03-05 07:40:18 -0800 (Wed, 05 Mar 2014)
Log Message:
-----------
Properly decode principal URIs when searching for records.

Modified Paths:
--------------
    CalendarServer/branches/release/CalendarServer-5.2-dev/twistedcaldav/directory/directory.py
    CalendarServer/branches/release/CalendarServer-5.2-dev/twistedcaldav/directory/test/test_directory.py

Modified: CalendarServer/branches/release/CalendarServer-5.2-dev/twistedcaldav/directory/directory.py
===================================================================
--- CalendarServer/branches/release/CalendarServer-5.2-dev/twistedcaldav/directory/directory.py	2014-03-05 15:22:47 UTC (rev 12813)
+++ CalendarServer/branches/release/CalendarServer-5.2-dev/twistedcaldav/directory/directory.py	2014-03-05 15:40:18 UTC (rev 12814)
@@ -66,6 +66,7 @@
 import pwd
 import sys
 import types
+from urllib import unquote
 
 log = Logger()
 
@@ -234,7 +235,7 @@
             else:
                 return None
         elif address.startswith("/principals/"):
-            parts = address.split("/")
+            parts = map(unquote, address.split("/"))
             if len(parts) == 4:
                 if parts[2] == "__uids__":
                     guid = parts[3]

Modified: CalendarServer/branches/release/CalendarServer-5.2-dev/twistedcaldav/directory/test/test_directory.py
===================================================================
--- CalendarServer/branches/release/CalendarServer-5.2-dev/twistedcaldav/directory/test/test_directory.py	2014-03-05 15:22:47 UTC (rev 12813)
+++ CalendarServer/branches/release/CalendarServer-5.2-dev/twistedcaldav/directory/test/test_directory.py	2014-03-05 15:40:18 UTC (rev 12814)
@@ -1086,6 +1086,85 @@
 
 
 
+class DirectoryServiceTests(TestCase):
+    """
+    Test L{DirectoryService} apis.
+    """
+
+    class StubDirectoryService(DirectoryService):
+
+        def __init__(self):
+            self._records = {}
+
+
+        def createRecord(self, recordType, guid=None, shortNames=(), authIDs=set(),
+            fullName=None, firstName=None, lastName=None, emailAddresses=set(),
+            uid=None, password=None, **kwargs):
+            """
+            Create/persist a directory record based on the given values
+            """
+
+            record = DirectoryRecord(
+                self,
+                recordType,
+                guid=guid,
+                shortNames=shortNames,
+                authIDs=authIDs,
+                fullName=fullName,
+                firstName=firstName,
+                lastName=lastName,
+                emailAddresses=emailAddresses,
+                uid=uid,
+                password=password,
+                **kwargs
+            )
+            self._records.setdefault(recordType, []).append(record)
+
+
+        def recordTypes(self):
+            return self._records.keys()
+
+
+        def listRecords(self, recordType):
+            return self._records[recordType]
+
+
+    def setUp(self):
+        self.service = self.StubDirectoryService()
+        self.service.setRealm("test")
+        self.service.baseGUID = "0E8E6EC2-8E52-4FF3-8F62-6F398B08A498"
+
+
+    def test_recordWithCalendarUserAddress_principal_uris(self):
+        """
+        Make sure that recordWithCalendarUserAddress handles percent-encoded
+        principal URIs.
+        """
+
+        self.service.createRecord(
+            DirectoryService.recordType_users,
+            guid="user01",
+            shortNames=("user 01", "User 01"),
+            fullName="User 01",
+            enabledForCalendaring=True,
+        )
+        self.service.createRecord(
+            DirectoryService.recordType_users,
+            guid="user02",
+            shortNames=("user02", "User 02"),
+            fullName="User 02",
+            enabledForCalendaring=True,
+        )
+
+        record = self.service.recordWithCalendarUserAddress("/principals/users/user%2001")
+        self.assertTrue(record is not None)
+        record = self.service.recordWithCalendarUserAddress("/principals/users/user02")
+        self.assertTrue(record is not None)
+        record = self.service.recordWithCalendarUserAddress("/principals/users/user%0202")
+        self.assertTrue(record is None)
+
+
+
 class DirectoryRecordTests(TestCase):
     """
     Test L{DirectoryRecord} apis.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20140305/21299715/attachment-0001.html>


More information about the calendarserver-changes mailing list