[CalendarServer-changes] [8042] CalendarServer/trunk/twistedcaldav

source_changes at macosforge.org source_changes at macosforge.org
Thu Sep 1 13:17:26 PDT 2011


Revision: 8042
          http://trac.macosforge.org/projects/calendarserver/changeset/8042
Author:   sagen at apple.com
Date:     2011-09-01 13:17:24 -0700 (Thu, 01 Sep 2011)
Log Message:
-----------
Ignore case when handling mailto's in the mail tokens db.

Modified Paths:
--------------
    CalendarServer/trunk/twistedcaldav/mail.py
    CalendarServer/trunk/twistedcaldav/test/test_mail.py

Modified: CalendarServer/trunk/twistedcaldav/mail.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/mail.py	2011-09-01 17:47:06 UTC (rev 8041)
+++ CalendarServer/trunk/twistedcaldav/mail.py	2011-09-01 20:17:24 UTC (rev 8042)
@@ -676,6 +676,28 @@
         )
         self._db_commit()
 
+    def lowercase(self):
+        rows = self._db_execute(
+            """
+            select ORGANIZER, ATTENDEE from TOKENS
+            """
+        )
+        for row in rows:
+            organizer = row[0]
+            attendee = row[1]
+            if organizer.lower().startswith("mailto:"):
+                self._db_execute(
+                    """
+                    update TOKENS set ORGANIZER = :1 WHERE ORGANIZER = :2
+                    """, organizer.lower(), organizer
+                )
+            self._db_execute(
+                """
+                update TOKENS set ATTENDEE = :1 WHERE ATTENDEE = :2
+                """, attendee.lower(), attendee
+            )
+        self._db_commit()
+
     def _db_version(self):
         """
         @return: the schema version assigned to this index.
@@ -740,6 +762,7 @@
         mailer = getattr(self, "mailer", None)
         if mailer is not None:
             mailer.purge()
+            mailer.lowercase()
 
 
 class MailGatewayServiceMaker(LoggingMixIn):
@@ -838,7 +861,13 @@
         self.db.purgeOldTokens(datetime.date.today() -
             datetime.timedelta(days=self.days))
 
+    def lowercase(self):
+        """
+        Convert all mailto: to lowercase
+        """
+        self.db.lowercase()
 
+
     def checkDSN(self, message):
         # returns (isDSN, Action, icalendar attachment)
 
@@ -1102,9 +1131,8 @@
                     attendees.append( (cn, mailto) )
 
 
-        recipient = recipient.lower()
         toAddr = recipient
-        if not recipient.startswith("mailto:"):
+        if not recipient.lower().startswith("mailto:"):
             raise ValueError("ATTENDEE address '%s' must be mailto: for iMIP "
                              "operation." % (recipient,))
         recipient = recipient[7:]
@@ -1116,7 +1144,7 @@
 
             # Reuse or generate a token based on originator, toAddr, and
             # event uid
-            token = self.db.getToken(originator, toAddr, icaluid)
+            token = self.db.getToken(originator, toAddr.lower(), icaluid)
             if token is None:
 
                 # Because in the past the originator was sometimes in mailto:
@@ -1124,10 +1152,10 @@
                 organizerProperty = calendar.getOrganizerProperty()
                 organizerEmailAddress = organizerProperty.parameterValue("EMAIL", None)
                 if organizerEmailAddress is not None:
-                    token = self.db.getToken("mailto:%s" % (organizerEmailAddress,), toAddr, icaluid)
+                    token = self.db.getToken("mailto:%s" % (organizerEmailAddress.lower(),), toAddr.lower(), icaluid)
 
             if token is None:
-                token = self.db.createToken(originator, toAddr, icaluid)
+                token = self.db.createToken(originator, toAddr.lower(), icaluid)
                 self.log_debug("Mail gateway created token %s for %s "
                                "(originator), %s (recipient) and %s (icaluid)"
                                % (token, originator, toAddr, icaluid))

Modified: CalendarServer/trunk/twistedcaldav/test/test_mail.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/test/test_mail.py	2011-09-01 17:47:06 UTC (rev 8041)
+++ CalendarServer/trunk/twistedcaldav/test/test_mail.py	2011-09-01 20:17:24 UTC (rev 8042)
@@ -81,15 +81,17 @@
         return self.dataPath.child(name).getContent()
 
 
-    def test_purge(self):
+    def test_purge_and_lowercase(self):
         """
-        Ensure that purge( ) cleans out old tokens
+        Ensure that purge( ) cleans out old tokens, and that lowercase( )
+        converts all mailto: to lowercase, since earlier server versions
+        didn't do that before inserting into the database.
         """
 
         # Insert an "old" token
-        token = "test_token"
-        organizer = "me at example.com"
-        attendee = "you at example.com"
+        token = "test_token_1"
+        organizer = "urn:uuid:19BFE23D-0269-46CA-877C-D4B521A7A9A5"
+        attendee = "mailto:you at example.com"
         icaluid = "123"
         pastDate = datetime.date(2009,1,1)
         self.handler.db._db_execute(
@@ -106,6 +108,46 @@
         self.assertEquals(retrieved, None)
 
 
+        # Insert a token with (old-format) mailto:
+        token = "test_token_2"
+        organizer = "MailTo:Organizer at Example.com"
+        attendee = "MAILTO:YouTwo at Example.com"
+        icaluid = "456"
+        futureDate = datetime.date(2100,1,1)
+        self.handler.db._db_execute(
+            """
+            insert into TOKENS (TOKEN, ORGANIZER, ATTENDEE, ICALUID, DATESTAMP)
+            values (:1, :2, :3, :4, :5)
+            """, token, organizer, attendee, icaluid, futureDate
+        )
+        self.handler.db._db_commit()
+
+        self.handler.lowercase()
+        retrieved = self.handler.db.getToken(organizer.lower(),
+            attendee.lower(), icaluid)
+        self.assertEquals(retrieved, token)
+
+        # Insert a token with (new-format) urn:uuid:
+        token = "test_token_3"
+        organizer = "urn:uuid:E0CF4031-676B-4668-A9D3-8F33A0212F70"
+        attendee = "MAILTO:YouTwo at Example.com"
+        icaluid = "789"
+        futureDate = datetime.date(2100,1,1)
+        self.handler.db._db_execute(
+            """
+            insert into TOKENS (TOKEN, ORGANIZER, ATTENDEE, ICALUID, DATESTAMP)
+            values (:1, :2, :3, :4, :5)
+            """, token, organizer, attendee, icaluid, futureDate
+        )
+        self.handler.db._db_commit()
+
+        self.handler.lowercase()
+        retrieved = self.handler.db.getToken(organizer,
+            attendee.lower(), icaluid)
+        self.assertEquals(retrieved, token)
+
+
+
     def test_iconPath(self):
         iconPath = self.handler.getIconPath({'day':'1', 'month':'1'}, False,
                                             language='en')
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20110901/d7f8e149/attachment-0001.html>


More information about the calendarserver-changes mailing list