Make message_handler more general

* message filter now return an account list to pass to the associated message handler

darcs-hash:20070522162247-86b55-5ec9aaa8ed3e917727fca0947c79277d8510067d.gz
This commit is contained in:
David Rousselie
2007-05-22 18:22:47 +02:00
parent 84525604eb
commit 5896ca069c

View File

@@ -205,13 +205,25 @@ class JCLComponent(Component, object):
self.handle_message) self.handle_message)
self.send_stanzas(self.account_manager.probe_all_accounts_presence()) self.send_stanzas(self.account_manager.probe_all_accounts_presence())
def password_msg_handler_filter(message, _account): def password_msg_handler_filter(message):
return hasattr(_account, 'password') \ name = message.get_to().node
and hasattr(_account, 'waiting_password_reply') \ bare_from_jid = unicode(message.get_from().bare())
and re.compile("\[PASSWORD\]").search(message.get_subject()) \ accounts = Account.select(\
is not None AND(Account.q.name == name, \
Account.q.user_jid == bare_from_jid))
if accounts.count() != 1:
print >>sys.stderr, "Account " + name + " for user " + bare_from_jid + " must be uniq"
_account = accounts[0]
if hasattr(_account, 'password') \
and hasattr(_account, 'waiting_password_reply') \
and re.compile("\[PASSWORD\]").search(message.get_subject()) \
is not None:
return accounts
else:
return None
def password_msg_handler(message, _account): def password_msg_handler(message, accounts):
_account = accounts[0]
lang_class = self.lang.get_lang_class_from_node(message.get_node()) lang_class = self.lang.get_lang_class_from_node(message.get_node())
_account.password = message.get_body() _account.password = message.get_body()
_account.waiting_password_reply = False _account.waiting_password_reply = False
@@ -460,17 +472,11 @@ class JCLComponent(Component, object):
Handle password response message Handle password response message
""" """
self.__logger.debug("MESSAGE: " + message.get_body()) self.__logger.debug("MESSAGE: " + message.get_body())
name = message.get_to().node
bare_from_jid = unicode(message.get_from().bare())
self.db_connect() self.db_connect()
accounts = Account.select(\
AND(Account.q.name == name, \
Account.q.user_jid == bare_from_jid))
if accounts.count() != 1:
print >>sys.stderr, "Account " + name + " for user " + bare_from_jid + " must be uniq"
for (msg_handler, filter_func) in self.msg_handlers: for (msg_handler, filter_func) in self.msg_handlers:
if filter_func(message, accounts[0]): accounts = filter_func(message)
msg_handler(message, accounts[0]) if accounts is not None:
msg_handler(message, accounts)
self.db_disconnect() self.db_disconnect()
return 1 return 1