Handle legacy JIDs
darcs-hash:20070616193334-86b55-587a00e3149ec89c4e18c4483bed628cec32ab09.gz
This commit is contained in:
@@ -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):
|
||||
|
||||
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user