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 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):
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
Reference in New Issue
Block a user