[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