[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