Handle legacy JIDs

darcs-hash:20070616193334-86b55-587a00e3149ec89c4e18c4483bed628cec32ab09.gz
This commit is contained in:
David Rousselie
2007-06-16 21:33:34 +02:00
parent d18117cd79
commit 4a72392bf9
2 changed files with 78 additions and 6 deletions

View File

@@ -29,7 +29,7 @@ from sqlobject import *
from pyxmpp.message import Message
from jcl.model.account import Account, PresenceAccount
from jcl.model.account import Account, PresenceAccount, LegacyJID
from jcl.jabber.component import Handler, DefaultSubscribeHandler, \
DefaultUnsubscribeHandler, DefaultPresenceHandler
from jcl.jabber.feeder import FeederComponent, Feeder, MessageSender, \
@@ -235,6 +235,8 @@ class SendMailMessageHandler(MailHandler):
return self.send_mail_result(message, lang_class, to_email)
class RootSendMailMessageHandler(SendMailMessageHandler):
"""Handle message sent to root JID"""
def __init__(self):
SendMailMessageHandler.__init__(self)
self.to_regexp = re.compile("^\s*(to|TO)\s*:\s*(?P<to_email>.*)")
@@ -280,7 +282,9 @@ class RootSendMailMessageHandler(SendMailMessageHandler):
body=lang_class.send_mail_error_no_to_header_body)]
class MailSubscribeHandler(DefaultSubscribeHandler, MailHandler):
"""Use DefaultSubscribeHandler handle method and MailHandler filter"""
"""Use DefaultSubscribeHandler handle method and MailHandler filter.
Filter email address in JID. Accept and add to LegacyJID table.
"""
def __init__(self):
DefaultSubscribeHandler.__init__(self)
@@ -290,10 +294,17 @@ class MailSubscribeHandler(DefaultSubscribeHandler, MailHandler):
return MailHandler.filter(self, stanza, lang_class)
def handle(self, stanza, lang_class, accounts):
return DefaultSubscribeHandler.handle(self, stanza, lang_class, accounts)
result = DefaultSubscribeHandler.handle(self, stanza, lang_class, accounts)
to_node = stanza.get_to().node
to_email = to_node.replace('%', '@', 1)
LegacyJID(legacy_address=to_email,
jid=unicode(stanza.get_to()),
account=accounts[0])
return result
class MailUnsubscribeHandler(DefaultUnsubscribeHandler, MailHandler):
"""Use DefaultUnsubscribeHandler handle method and MailHandler filter"""
"""Use DefaultUnsubscribeHandler handle method and MailHandler filter.
"""
def __init__(self):
DefaultUnsubscribeHandler.__init__(self)
@@ -303,7 +314,12 @@ class MailUnsubscribeHandler(DefaultUnsubscribeHandler, MailHandler):
return MailHandler.filter(self, stanza, lang_class)
def handle(self, stanza, lang_class, accounts):
return DefaultUnsubscribeHandler.handle(self, stanza, lang_class, accounts)
result = DefaultUnsubscribeHandler.handle(self, stanza, lang_class, accounts)
legacy_jid = LegacyJID.select(\
LegacyJID.q.jid == unicode(stanza.get_to()))
if legacy_jid.count() == 1:
legacy_jid[0].destroySelf()
return result
class MailFeederHandler(FeederHandler):
def filter(self, stanza, lang_class):

View File

@@ -32,7 +32,7 @@ from pyxmpp.presence import Presence
from pyxmpp.message import Message
from jcl.model import account
from jcl.model.account import Account, PresenceAccount
from jcl.model.account import Account, PresenceAccount, LegacyJID
from jcl.jabber.tests.component import DefaultSubscribeHandler_TestCase, \
DefaultUnsubscribeHandler_TestCase
from jcl.jabber.tests.feeder import FeederMock, SenderMock
@@ -781,11 +781,67 @@ class MailSubscribeHandler_TestCase(DefaultSubscribeHandler_TestCase, MailHandle
def setUp(self):
MailHandler_TestCase.setUp(self)
self.handler = MailSubscribeHandler()
account.hub.threadConnection = connectionForURI('sqlite://' + DB_URL)
LegacyJID.createTable(ifNotExists=True)
del account.hub.threadConnection
def test_handle(self):
account.hub.threadConnection = connectionForURI('sqlite://' + DB_URL)
account11 = SMTPAccount(user_jid="user1@test.com",
name="account11",
jid="account11@jcl.test.com")
presence = Presence(from_jid="user1@test.com",
to_jid="user1%test.com@jcl.test.com",
stanza_type="subscribe")
result = self.handler.handle(presence, Lang.en, [account11])
legacy_jids = LegacyJID.select()
self.assertEquals(legacy_jids.count(), 1)
del account.hub.threadConnection
class MailUnsubscribeHandler_TestCase(DefaultUnsubscribeHandler_TestCase, MailHandler_TestCase):
def setUp(self):
MailHandler_TestCase.setUp(self)
self.handler = MailUnsubscribeHandler()
account.hub.threadConnection = connectionForURI('sqlite://' + DB_URL)
LegacyJID.createTable(ifNotExists=True)
del account.hub.threadConnection
def test_handle(self):
account.hub.threadConnection = connectionForURI('sqlite://' + DB_URL)
account11 = SMTPAccount(user_jid="user1@test.com",
name="account11",
jid="account11@jcl.test.com")
account12 = SMTPAccount(user_jid="user1@test.com",
name="account12",
jid="account12@jcl.test.com")
account2 = SMTPAccount(user_jid="user2@test.com",
name="account2",
jid="account2@jcl.test.com")
presence = Presence(from_jid="user1@test.com",
to_jid="u111%test.com@jcl.test.com",
stanza_type="unsubscribe")
legacy_jid111 = LegacyJID(legacy_address="u111@test.com",
jid="u111%test.com@jcl.test.com",
account=account11)
legacy_jid112 = LegacyJID(legacy_address="u112@test.com",
jid="u112%test.com@jcl.test.com",
account=account11)
legacy_jid121 = LegacyJID(legacy_address="u121@test.com",
jid="u121%test.com@jcl.test.com",
account=account12)
legacy_jid122 = LegacyJID(legacy_address="u122@test.com",
jid="u122%test.com@jcl.test.com",
account=account12)
legacy_jid21 = LegacyJID(legacy_address="u21@test.com",
jid="u21%test.com@jcl.test.com",
account=account2)
result = self.handler.handle(presence, Lang.en, [account11])
legacy_jids = LegacyJID.select()
self.assertEquals(legacy_jids.count(), 4)
removed_legacy_jid = LegacyJID.select(\
LegacyJID.q.jid == "u111%test.com@jcl.test.com")
self.assertEquals(removed_legacy_jid.count(), 0)
del account.hub.threadConnection
class MailFeederHandler_TestCase(unittest.TestCase):
def setUp(self):