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 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, \ from jcl.jabber.component import Handler, DefaultSubscribeHandler, \
DefaultUnsubscribeHandler, DefaultPresenceHandler DefaultUnsubscribeHandler, DefaultPresenceHandler
from jcl.jabber.feeder import FeederComponent, Feeder, MessageSender, \ 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) return self.send_mail_result(message, lang_class, to_email)
class RootSendMailMessageHandler(SendMailMessageHandler): class RootSendMailMessageHandler(SendMailMessageHandler):
"""Handle message sent to root JID"""
def __init__(self): def __init__(self):
SendMailMessageHandler.__init__(self) SendMailMessageHandler.__init__(self)
self.to_regexp = re.compile("^\s*(to|TO)\s*:\s*(?P<to_email>.*)") 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)] body=lang_class.send_mail_error_no_to_header_body)]
class MailSubscribeHandler(DefaultSubscribeHandler, MailHandler): 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): def __init__(self):
DefaultSubscribeHandler.__init__(self) DefaultSubscribeHandler.__init__(self)
@@ -290,10 +294,17 @@ class MailSubscribeHandler(DefaultSubscribeHandler, MailHandler):
return MailHandler.filter(self, stanza, lang_class) return MailHandler.filter(self, stanza, lang_class)
def handle(self, stanza, lang_class, accounts): 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): class MailUnsubscribeHandler(DefaultUnsubscribeHandler, MailHandler):
"""Use DefaultUnsubscribeHandler handle method and MailHandler filter""" """Use DefaultUnsubscribeHandler handle method and MailHandler filter.
"""
def __init__(self): def __init__(self):
DefaultUnsubscribeHandler.__init__(self) DefaultUnsubscribeHandler.__init__(self)
@@ -303,7 +314,12 @@ class MailUnsubscribeHandler(DefaultUnsubscribeHandler, MailHandler):
return MailHandler.filter(self, stanza, lang_class) return MailHandler.filter(self, stanza, lang_class)
def handle(self, stanza, lang_class, accounts): 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): class MailFeederHandler(FeederHandler):
def filter(self, stanza, lang_class): def filter(self, stanza, lang_class):

View File

@@ -32,7 +32,7 @@ from pyxmpp.presence import Presence
from pyxmpp.message import Message from pyxmpp.message import Message
from jcl.model import account 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, \ from jcl.jabber.tests.component import DefaultSubscribeHandler_TestCase, \
DefaultUnsubscribeHandler_TestCase DefaultUnsubscribeHandler_TestCase
from jcl.jabber.tests.feeder import FeederMock, SenderMock from jcl.jabber.tests.feeder import FeederMock, SenderMock
@@ -781,11 +781,67 @@ class MailSubscribeHandler_TestCase(DefaultSubscribeHandler_TestCase, MailHandle
def setUp(self): def setUp(self):
MailHandler_TestCase.setUp(self) MailHandler_TestCase.setUp(self)
self.handler = MailSubscribeHandler() 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): class MailUnsubscribeHandler_TestCase(DefaultUnsubscribeHandler_TestCase, MailHandler_TestCase):
def setUp(self): def setUp(self):
MailHandler_TestCase.setUp(self) MailHandler_TestCase.setUp(self)
self.handler = MailUnsubscribeHandler() 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): class MailFeederHandler_TestCase(unittest.TestCase):
def setUp(self): def setUp(self):