From 702e58324fc399f77c5c92601c7d5a745a4c49b0 Mon Sep 17 00:00:00 2001 From: David Rousselie Date: Wed, 8 Aug 2007 18:07:58 +0200 Subject: [PATCH] 'change-user-password' ad-hoc command form was not complete darcs-hash:20070808160758-86b55-d58f617297011e200cef0886f936588d19c7720a.gz --- src/jcl/jabber/command.py | 64 ++++++++++++++++++------------- src/jcl/jabber/component.py | 2 +- src/jcl/jabber/tests/command.py | 12 ++++-- src/jcl/jabber/tests/component.py | 2 +- src/jcl/model/account.py | 7 +++- 5 files changed, 52 insertions(+), 35 deletions(-) diff --git a/src/jcl/jabber/command.py b/src/jcl/jabber/command.py index a1ad4e4..3e8c521 100644 --- a/src/jcl/jabber/command.py +++ b/src/jcl/jabber/command.py @@ -223,7 +223,17 @@ class JCLCommandManager(CommandManager): """Implement default set of Ad-Hoc commands""" def __init__(self, component=None, account_manager=None): - """JCLCommandManager constructor""" + """ + JCLCommandManager constructor + Not implemented commands: + "http://jabber.org/protocol/admin#user-stats", + "http://jabber.org/protocol/admin#edit-blacklist", + "http://jabber.org/protocol/admin#add-to-blacklist-in", + "http://jabber.org/protocol/admin#add-to-blacklist-out", + "http://jabber.org/protocol/admin#edit-whitelist", + "http://jabber.org/protocol/admin#add-to-whitelist-in", + "http://jabber.org/protocol/admin#add-to-whitelist-out", + """ CommandManager.__init__(self, component, account_manager) self.__logger = logging.getLogger("jcl.jabber.command.JCLCommandManager") self.commands.extend(["list", @@ -236,13 +246,6 @@ class JCLCommandManager(CommandManager): "http://jabber.org/protocol/admin#change-user-password", "http://jabber.org/protocol/admin#get-user-roster", "http://jabber.org/protocol/admin#get-user-lastlogin", - "http://jabber.org/protocol/admin#user-stats", - "http://jabber.org/protocol/admin#edit-blacklist", - "http://jabber.org/protocol/admin#add-to-blacklist-in", - "http://jabber.org/protocol/admin#add-to-blacklist-out", - "http://jabber.org/protocol/admin#edit-whitelist", - "http://jabber.org/protocol/admin#add-to-whitelist-in", - "http://jabber.org/protocol/admin#add-to-whitelist-out", "http://jabber.org/protocol/admin#get-registered-users-num", "http://jabber.org/protocol/admin#get-disabled-users-num", "http://jabber.org/protocol/admin#get-online-users-num", @@ -263,6 +266,9 @@ class JCLCommandManager(CommandManager): "http://jabber.org/protocol/admin#restart", "http://jabber.org/protocol/admin#shutdown"]) + def get_name_and_jid(self, mixed_name_and_jid): + return mixed_name_and_jid.split("/", 1)[:2] + ## Reusable steps def add_form_select_user_jids(self, command_node, lang_class): result_form = Form(xmlnode_or_type="result", @@ -298,7 +304,7 @@ class JCLCommandManager(CommandManager): def add_form_select_accounts(self, session_context, command_node, lang_class, - filter=None): + filter=None, format_as_xml=True): """ Add a form to select accounts for user JIDs contained in session_context[\"user_jids\"] @@ -310,11 +316,13 @@ class JCLCommandManager(CommandManager): label="Account") # TODO self.__add_accounts_to_field(session_context["user_jids"], field, lang_class, filter) - result_form.as_xml(command_node) + if format_as_xml: + result_form.as_xml(command_node) return result_form def add_form_select_account(self, session_context, - command_node, lang_class): + command_node, lang_class, + format_as_xml=True): """ Add a form to select account for user JIDs contained in session_context[\"user_jids\"] @@ -326,7 +334,8 @@ class JCLCommandManager(CommandManager): label="Account") # TODO self.__add_accounts_to_field(session_context["user_jid"], field, lang_class) - result_form.as_xml(command_node) + if format_as_xml: + result_form.as_xml(command_node) return result_form def select_user_jids_step_1(self, info_query, session_context, @@ -344,19 +353,19 @@ class JCLCommandManager(CommandManager): return (self.add_form_select_user_jid(command_node, lang_class), []) def select_accounts_step_2(self, info_query, session_context, - command_node, lang_class): + command_node, lang_class, format_as_xml=True): self.__logger.debug("Executing select_accounts step 2") self.add_actions(command_node, [ACTION_PREVIOUS, ACTION_COMPLETE], 1) return (self.add_form_select_accounts(session_context, command_node, - lang_class), + lang_class, format_as_xml), []) def select_account_step_2(self, info_query, session_context, - command_node, lang_class): + command_node, lang_class, format_as_xml=True): self.__logger.debug("Executing select_account step 2") self.add_actions(command_node, [ACTION_PREVIOUS, ACTION_COMPLETE], 1) return (self.add_form_select_account(session_context, command_node, - lang_class), + lang_class, format_as_xml), []) def execute_list_1(self, info_query, session_context, @@ -432,7 +441,7 @@ class JCLCommandManager(CommandManager): self.__logger.debug("Executing command 'delete-user' step 3") result = [] for account_name in session_context["account_names"]: - name, user_jid = account_name.split("/", 1)[:2] + name, user_jid = self.get_name_and_jid(account_name) result += self.account_manager.remove_account_from_name(user_jid, name) command_node.setProp("status", STATUS_COMPLETED) @@ -454,7 +463,7 @@ class JCLCommandManager(CommandManager): self.__logger.debug("Executing command 'disable-user' step 3") result = [] for account_name in session_context["account_names"]: - name, user_jid = account_name.split("/", 1)[:2] + name, user_jid = self.get_name_and_jid(account_name) _account = account.get_account(user_jid, name) _account.enabled = False command_node.setProp("status", STATUS_COMPLETED) @@ -476,7 +485,7 @@ class JCLCommandManager(CommandManager): self.__logger.debug("Executing command 'reenable-user' step 3") result = [] for account_name in session_context["account_names"]: - name, user_jid = account_name.split("/", 1)[:2] + name, user_jid = self.get_name_and_jid(account_name) _account = account.get_account(user_jid, name) _account.enabled = True command_node.setProp("status", STATUS_COMPLETED) @@ -498,7 +507,7 @@ class JCLCommandManager(CommandManager): self.__logger.debug("Executing command 'end-user-session' step 3") result = [] for account_name in session_context["account_names"]: - name, user_jid = account_name.split("/", 1)[:2] + name, user_jid = self.get_name_and_jid(account_name) _account = account.get_account(user_jid, name) result += self.component.account_manager.send_presence_unavailable( _account) @@ -515,7 +524,7 @@ class JCLCommandManager(CommandManager): result_form.add_field(field_type="hidden", name="FORM_TYPE", value="http://jabber.org/protocol/admin") - name, user_jid = session_context["account_name"][0].split("/", 1)[:2] + name, user_jid = self.get_name_and_jid(session_context["account_name"][0]) _account = account.get_account(user_jid, name) result_form.fields.append(FieldNoType(name="accountjids", value=user_jid)) @@ -533,17 +542,19 @@ class JCLCommandManager(CommandManager): (result_form, result) = self.select_account_step_2(info_query, session_context, command_node, - lang_class) + lang_class, + False) result_form.add_field(field_type="text-private", name="password", label=lang_class.field_password) + result_form.as_xml(command_node) return (result_form, result) def execute_change_user_password_3(self, info_query, session_context, command_node, lang_class): self.__logger.debug("Executing command 'change-user-password' step 2") - _account = account.get_account(session_context["user_jid"][0], - session_context["account_name"][0]) + name, user_jid = self.get_name_and_jid(session_context["account_name"][0]) + _account = account.get_account(user_jid, name) _account.password = session_context["password"][0] command_node.setProp("status", STATUS_COMPLETED) return (None, []) @@ -589,9 +600,8 @@ class JCLCommandManager(CommandManager): result_form.add_field(field_type="hidden", name="FORM_TYPE", value="http://jabber.org/protocol/admin") - user_jid = session_context["user_jid"][0] - _account = account.get_account(user_jid, - session_context["account_name"][0]) + name, user_jid = self.get_name_and_jid(session_context["account_name"][0]) + _account = account.get_account(user_jid, name) result_form.fields.append(FieldNoType(name="user_jid", value=user_jid)) result_form.fields.append(FieldNoType(name="lastlogin", diff --git a/src/jcl/jabber/component.py b/src/jcl/jabber/component.py index 6c13ffa..c7125f0 100644 --- a/src/jcl/jabber/component.py +++ b/src/jcl/jabber/component.py @@ -241,7 +241,7 @@ class JCLComponent(Component, object): def send_stanzas(self, stanzas): """Send given stanza list""" - self.__logger.debug("Sending responses") + self.__logger.debug("Sending responses: " + str(stanzas)) if stanzas is not None: for stanza in stanzas: self.stream.send(stanza) diff --git a/src/jcl/jabber/tests/command.py b/src/jcl/jabber/tests/command.py index 31bef5c..c029453 100644 --- a/src/jcl/jabber/tests/command.py +++ b/src/jcl/jabber/tests/command.py @@ -1275,6 +1275,10 @@ class JCLCommandManager_TestCase(JCLTestCase): context_session = self.command_manager.sessions[session_id][1] self.assertEquals(context_session["user_jid"], ["test1@test.com"]) + fields = result[0].xpath_eval("c:command/data:x/data:field", + {"c": "http://jabber.org/protocol/commands", + "data": "jabber:x:data"}) + self.assertEquals(len(fields), 2) # Third step info_query = Iq(stanza_type="set", @@ -1287,7 +1291,7 @@ class JCLCommandManager_TestCase(JCLTestCase): submit_form = Form(xmlnode_or_type="submit") submit_form.add_field(field_type="list-single", name="account_name", - value="account11") + value="account11/test1@test.com") submit_form.add_field(field_type="text-private", name="password", value="pass2") @@ -1301,7 +1305,7 @@ class JCLCommandManager_TestCase(JCLTestCase): self.assertEquals(xml_command.prop("sessionid"), session_id) self.__check_actions(result[0]) self.assertEquals(context_session["account_name"], - ["account11"]) + ["account11/test1@test.com"]) self.assertEquals(context_session["password"], ["pass2"]) self.assertEquals(account11.password, "pass2") @@ -1478,7 +1482,7 @@ class JCLCommandManager_TestCase(JCLTestCase): submit_form = Form(xmlnode_or_type="submit") submit_form.add_field(field_type="list-single", name="account_name", - value="account11") + value="account11/test1@test.com") submit_form.as_xml(command_node) result = self.command_manager.apply_command_action(info_query, "http://jabber.org/protocol/admin#get-user-lastlogin", @@ -1489,7 +1493,7 @@ class JCLCommandManager_TestCase(JCLTestCase): self.assertEquals(xml_command.prop("sessionid"), session_id) self.__check_actions(result[0]) self.assertEquals(context_session["account_name"], - ["account11"]) + ["account11/test1@test.com"]) fields = result[0].xpath_eval("c:command/data:x/data:field", {"c": "http://jabber.org/protocol/commands", "data": "jabber:x:data"}) diff --git a/src/jcl/jabber/tests/component.py b/src/jcl/jabber/tests/component.py index 393d273..5b65d17 100644 --- a/src/jcl/jabber/tests/component.py +++ b/src/jcl/jabber/tests/component.py @@ -737,7 +737,7 @@ class JCLComponent_TestCase(JCLTestCase): to_jid="jcl.test.com") disco_items = self.comp.disco_get_items("http://jabber.org/protocol/commands", info_query) - self.assertEquals(len(disco_items.get_items()), 36) + self.assertEquals(len(disco_items.get_items()), 29) item = disco_items.get_items()[0] self.assertEquals(item.get_node(), "list") self.assertEquals(item.get_name(), Lang.en.command_list) diff --git a/src/jcl/model/account.py b/src/jcl/model/account.py index aaf1bad..c3465b0 100644 --- a/src/jcl/model/account.py +++ b/src/jcl/model/account.py @@ -187,9 +187,12 @@ def get_accounts_count(bare_user_jid, account_class=Account): model.db_disconnect() return accounts_count -def get_all_accounts_count(account_class=Account): +def get_all_accounts_count(account_class=Account, filter=None): model.db_connect() - accounts_count = account_class.select().count() + if filter is None: + accounts_count = account_class.select().count() + else: + accounts_count = account_class.select(filter).count() model.db_disconnect() return accounts_count