'change-user-password' ad-hoc command form was not complete

darcs-hash:20070808160758-86b55-d58f617297011e200cef0886f936588d19c7720a.gz
This commit is contained in:
David Rousselie
2007-08-08 18:07:58 +02:00
parent 24f175b271
commit 702e58324f
5 changed files with 52 additions and 35 deletions

View File

@@ -223,7 +223,17 @@ class JCLCommandManager(CommandManager):
"""Implement default set of Ad-Hoc commands""" """Implement default set of Ad-Hoc commands"""
def __init__(self, component=None, account_manager=None): 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) CommandManager.__init__(self, component, account_manager)
self.__logger = logging.getLogger("jcl.jabber.command.JCLCommandManager") self.__logger = logging.getLogger("jcl.jabber.command.JCLCommandManager")
self.commands.extend(["list", self.commands.extend(["list",
@@ -236,13 +246,6 @@ class JCLCommandManager(CommandManager):
"http://jabber.org/protocol/admin#change-user-password", "http://jabber.org/protocol/admin#change-user-password",
"http://jabber.org/protocol/admin#get-user-roster", "http://jabber.org/protocol/admin#get-user-roster",
"http://jabber.org/protocol/admin#get-user-lastlogin", "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-registered-users-num",
"http://jabber.org/protocol/admin#get-disabled-users-num", "http://jabber.org/protocol/admin#get-disabled-users-num",
"http://jabber.org/protocol/admin#get-online-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#restart",
"http://jabber.org/protocol/admin#shutdown"]) "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 ## Reusable steps
def add_form_select_user_jids(self, command_node, lang_class): def add_form_select_user_jids(self, command_node, lang_class):
result_form = Form(xmlnode_or_type="result", result_form = Form(xmlnode_or_type="result",
@@ -298,7 +304,7 @@ class JCLCommandManager(CommandManager):
def add_form_select_accounts(self, session_context, def add_form_select_accounts(self, session_context,
command_node, lang_class, command_node, lang_class,
filter=None): filter=None, format_as_xml=True):
""" """
Add a form to select accounts for user JIDs contained in Add a form to select accounts for user JIDs contained in
session_context[\"user_jids\"] session_context[\"user_jids\"]
@@ -310,11 +316,13 @@ class JCLCommandManager(CommandManager):
label="Account") # TODO label="Account") # TODO
self.__add_accounts_to_field(session_context["user_jids"], self.__add_accounts_to_field(session_context["user_jids"],
field, lang_class, filter) field, lang_class, filter)
result_form.as_xml(command_node) if format_as_xml:
result_form.as_xml(command_node)
return result_form return result_form
def add_form_select_account(self, session_context, 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 Add a form to select account for user JIDs contained in
session_context[\"user_jids\"] session_context[\"user_jids\"]
@@ -326,7 +334,8 @@ class JCLCommandManager(CommandManager):
label="Account") # TODO label="Account") # TODO
self.__add_accounts_to_field(session_context["user_jid"], self.__add_accounts_to_field(session_context["user_jid"],
field, lang_class) field, lang_class)
result_form.as_xml(command_node) if format_as_xml:
result_form.as_xml(command_node)
return result_form return result_form
def select_user_jids_step_1(self, info_query, session_context, 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), []) return (self.add_form_select_user_jid(command_node, lang_class), [])
def select_accounts_step_2(self, info_query, session_context, 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.__logger.debug("Executing select_accounts step 2")
self.add_actions(command_node, [ACTION_PREVIOUS, ACTION_COMPLETE], 1) self.add_actions(command_node, [ACTION_PREVIOUS, ACTION_COMPLETE], 1)
return (self.add_form_select_accounts(session_context, command_node, 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, 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.__logger.debug("Executing select_account step 2")
self.add_actions(command_node, [ACTION_PREVIOUS, ACTION_COMPLETE], 1) self.add_actions(command_node, [ACTION_PREVIOUS, ACTION_COMPLETE], 1)
return (self.add_form_select_account(session_context, command_node, 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, 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") self.__logger.debug("Executing command 'delete-user' step 3")
result = [] result = []
for account_name in session_context["account_names"]: 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, result += self.account_manager.remove_account_from_name(user_jid,
name) name)
command_node.setProp("status", STATUS_COMPLETED) command_node.setProp("status", STATUS_COMPLETED)
@@ -454,7 +463,7 @@ class JCLCommandManager(CommandManager):
self.__logger.debug("Executing command 'disable-user' step 3") self.__logger.debug("Executing command 'disable-user' step 3")
result = [] result = []
for account_name in session_context["account_names"]: 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 = account.get_account(user_jid, name)
_account.enabled = False _account.enabled = False
command_node.setProp("status", STATUS_COMPLETED) command_node.setProp("status", STATUS_COMPLETED)
@@ -476,7 +485,7 @@ class JCLCommandManager(CommandManager):
self.__logger.debug("Executing command 'reenable-user' step 3") self.__logger.debug("Executing command 'reenable-user' step 3")
result = [] result = []
for account_name in session_context["account_names"]: 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 = account.get_account(user_jid, name)
_account.enabled = True _account.enabled = True
command_node.setProp("status", STATUS_COMPLETED) command_node.setProp("status", STATUS_COMPLETED)
@@ -498,7 +507,7 @@ class JCLCommandManager(CommandManager):
self.__logger.debug("Executing command 'end-user-session' step 3") self.__logger.debug("Executing command 'end-user-session' step 3")
result = [] result = []
for account_name in session_context["account_names"]: 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 = account.get_account(user_jid, name)
result += self.component.account_manager.send_presence_unavailable( result += self.component.account_manager.send_presence_unavailable(
_account) _account)
@@ -515,7 +524,7 @@ class JCLCommandManager(CommandManager):
result_form.add_field(field_type="hidden", result_form.add_field(field_type="hidden",
name="FORM_TYPE", name="FORM_TYPE",
value="http://jabber.org/protocol/admin") 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) _account = account.get_account(user_jid, name)
result_form.fields.append(FieldNoType(name="accountjids", result_form.fields.append(FieldNoType(name="accountjids",
value=user_jid)) value=user_jid))
@@ -533,17 +542,19 @@ class JCLCommandManager(CommandManager):
(result_form, result) = self.select_account_step_2(info_query, (result_form, result) = self.select_account_step_2(info_query,
session_context, session_context,
command_node, command_node,
lang_class) lang_class,
False)
result_form.add_field(field_type="text-private", result_form.add_field(field_type="text-private",
name="password", name="password",
label=lang_class.field_password) label=lang_class.field_password)
result_form.as_xml(command_node)
return (result_form, result) return (result_form, result)
def execute_change_user_password_3(self, info_query, session_context, def execute_change_user_password_3(self, info_query, session_context,
command_node, lang_class): command_node, lang_class):
self.__logger.debug("Executing command 'change-user-password' step 2") self.__logger.debug("Executing command 'change-user-password' step 2")
_account = account.get_account(session_context["user_jid"][0], name, user_jid = self.get_name_and_jid(session_context["account_name"][0])
session_context["account_name"][0]) _account = account.get_account(user_jid, name)
_account.password = session_context["password"][0] _account.password = session_context["password"][0]
command_node.setProp("status", STATUS_COMPLETED) command_node.setProp("status", STATUS_COMPLETED)
return (None, []) return (None, [])
@@ -589,9 +600,8 @@ class JCLCommandManager(CommandManager):
result_form.add_field(field_type="hidden", result_form.add_field(field_type="hidden",
name="FORM_TYPE", name="FORM_TYPE",
value="http://jabber.org/protocol/admin") value="http://jabber.org/protocol/admin")
user_jid = session_context["user_jid"][0] name, user_jid = self.get_name_and_jid(session_context["account_name"][0])
_account = account.get_account(user_jid, _account = account.get_account(user_jid, name)
session_context["account_name"][0])
result_form.fields.append(FieldNoType(name="user_jid", result_form.fields.append(FieldNoType(name="user_jid",
value=user_jid)) value=user_jid))
result_form.fields.append(FieldNoType(name="lastlogin", result_form.fields.append(FieldNoType(name="lastlogin",

View File

@@ -241,7 +241,7 @@ class JCLComponent(Component, object):
def send_stanzas(self, stanzas): def send_stanzas(self, stanzas):
"""Send given stanza list""" """Send given stanza list"""
self.__logger.debug("Sending responses") self.__logger.debug("Sending responses: " + str(stanzas))
if stanzas is not None: if stanzas is not None:
for stanza in stanzas: for stanza in stanzas:
self.stream.send(stanza) self.stream.send(stanza)

View File

@@ -1275,6 +1275,10 @@ class JCLCommandManager_TestCase(JCLTestCase):
context_session = self.command_manager.sessions[session_id][1] context_session = self.command_manager.sessions[session_id][1]
self.assertEquals(context_session["user_jid"], self.assertEquals(context_session["user_jid"],
["test1@test.com"]) ["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 # Third step
info_query = Iq(stanza_type="set", info_query = Iq(stanza_type="set",
@@ -1287,7 +1291,7 @@ class JCLCommandManager_TestCase(JCLTestCase):
submit_form = Form(xmlnode_or_type="submit") submit_form = Form(xmlnode_or_type="submit")
submit_form.add_field(field_type="list-single", submit_form.add_field(field_type="list-single",
name="account_name", name="account_name",
value="account11") value="account11/test1@test.com")
submit_form.add_field(field_type="text-private", submit_form.add_field(field_type="text-private",
name="password", name="password",
value="pass2") value="pass2")
@@ -1301,7 +1305,7 @@ class JCLCommandManager_TestCase(JCLTestCase):
self.assertEquals(xml_command.prop("sessionid"), session_id) self.assertEquals(xml_command.prop("sessionid"), session_id)
self.__check_actions(result[0]) self.__check_actions(result[0])
self.assertEquals(context_session["account_name"], self.assertEquals(context_session["account_name"],
["account11"]) ["account11/test1@test.com"])
self.assertEquals(context_session["password"], self.assertEquals(context_session["password"],
["pass2"]) ["pass2"])
self.assertEquals(account11.password, "pass2") self.assertEquals(account11.password, "pass2")
@@ -1478,7 +1482,7 @@ class JCLCommandManager_TestCase(JCLTestCase):
submit_form = Form(xmlnode_or_type="submit") submit_form = Form(xmlnode_or_type="submit")
submit_form.add_field(field_type="list-single", submit_form.add_field(field_type="list-single",
name="account_name", name="account_name",
value="account11") value="account11/test1@test.com")
submit_form.as_xml(command_node) submit_form.as_xml(command_node)
result = self.command_manager.apply_command_action(info_query, result = self.command_manager.apply_command_action(info_query,
"http://jabber.org/protocol/admin#get-user-lastlogin", "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.assertEquals(xml_command.prop("sessionid"), session_id)
self.__check_actions(result[0]) self.__check_actions(result[0])
self.assertEquals(context_session["account_name"], self.assertEquals(context_session["account_name"],
["account11"]) ["account11/test1@test.com"])
fields = result[0].xpath_eval("c:command/data:x/data:field", fields = result[0].xpath_eval("c:command/data:x/data:field",
{"c": "http://jabber.org/protocol/commands", {"c": "http://jabber.org/protocol/commands",
"data": "jabber:x:data"}) "data": "jabber:x:data"})

View File

@@ -737,7 +737,7 @@ class JCLComponent_TestCase(JCLTestCase):
to_jid="jcl.test.com") to_jid="jcl.test.com")
disco_items = self.comp.disco_get_items("http://jabber.org/protocol/commands", disco_items = self.comp.disco_get_items("http://jabber.org/protocol/commands",
info_query) info_query)
self.assertEquals(len(disco_items.get_items()), 36) self.assertEquals(len(disco_items.get_items()), 29)
item = disco_items.get_items()[0] item = disco_items.get_items()[0]
self.assertEquals(item.get_node(), "list") self.assertEquals(item.get_node(), "list")
self.assertEquals(item.get_name(), Lang.en.command_list) self.assertEquals(item.get_name(), Lang.en.command_list)

View File

@@ -187,9 +187,12 @@ def get_accounts_count(bare_user_jid, account_class=Account):
model.db_disconnect() model.db_disconnect()
return accounts_count return accounts_count
def get_all_accounts_count(account_class=Account): def get_all_accounts_count(account_class=Account, filter=None):
model.db_connect() 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() model.db_disconnect()
return accounts_count return accounts_count