changeset 110:e02281edc273

mod_adhoc_cmd_admin: Add Change User Password command
author Florian Zeitz <florob@babelmonkeys.de>
date Thu, 10 Dec 2009 21:23:52 +0100
parents 9b63fd1196c0
children 3de60860adca
files mod_adhoc_cmd_admin/mod_adhoc_cmd_admin.lua
diffstat 1 files changed, 40 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/mod_adhoc_cmd_admin/mod_adhoc_cmd_admin.lua	Wed Dec 09 23:08:19 2009 +0100
+++ b/mod_adhoc_cmd_admin/mod_adhoc_cmd_admin.lua	Thu Dec 10 21:23:52 2009 +0100
@@ -32,6 +32,15 @@
 	{ name = "password-verify", type = "text-private", label = "Retype password" };
 };
 
+local change_user_password_layout = dataforms_new{
+	title = "Changing a User Password";
+	instructions = "Fill out this form to change a user's password.";
+
+	{ name = "FORM_TYPE", type = "hidden", value = "http://jabber.org/protocol/admin" };
+	{ name = "accountjid", type = "jid-single", required = true, label = "The Jabber ID for this account" };
+	{ name = "password", type = "text-private", required = true, label = "The password for this account" };
+};
+
 local delete_user_layout = dataforms_new{
 	title = "Deleting a User";
 	instructions = "Fill out this form to delete a user.";
@@ -116,6 +125,35 @@
 	return true;
 end
 
+function change_user_password_command_handler(item, origin, stanza)
+	if stanza.tags[1].attr.sessionid and sessions[stanza.tags[1].attr.sessionid] then
+		if stanza.tags[1].attr.action == "cancel" then
+			origin.send(st.reply(stanza):add_child(item:cmdtag("canceled", stanza.tags[1].attr.sessionid)));
+			sessions[stanza.tags[1].attr.sessionid] = nil;
+			return true;
+		end
+		local form = stanza.tags[1]:child_with_ns("jabber:x:data");
+		local fields = change_user_password_layout:data(form);
+		local username, host, resource = jid.split(fields.accountjid);
+		if usermanager_user_exists(username, host) and usermanager_create_user(username, fields.password, host) then
+			origin.send(st.reply(stanza):add_child(item:cmdtag("completed", stanza.tags[1].attr.sessionid)
+				:tag("note", {type="info"})
+					:text("Password successfully changed")));
+		else
+			origin.send(st.error_reply(stanza, "cancel", "item-not-found", "User does not exist")
+				:add_child(item:cmdtag("canceled", stanza.tags[1].attr.sessionid)
+					:tag("note", {type="error"}):text("User does not exist")));
+		end
+		sessions[stanza.tags[1].attr.sessionid] = nil;
+		return true;
+	else
+		local sessionid=uuid.generate();
+		sessions[sessionid] = "executing";
+		origin.send(st.reply(stanza):add_child(item:cmdtag("executing", sessionid):add_child(change_user_password_layout:form())));
+	end
+	return true;
+end
+
 function delete_user_command_handler(item, origin, stanza)
 	if stanza.tags[1].attr.sessionid and sessions[stanza.tags[1].attr.sessionid] then
 		if stanza.tags[1].attr.action == "cancel" then
@@ -268,12 +306,14 @@
 end
 
 local add_user_desc = adhoc_new("Add User", "http://jabber.org/protocol/admin#add-user", add_user_command_handler, "admin");
+local change_user_password_desc = adhoc_new("Change User Password", "http://jabber.org/protocol/admin#change-user-password", change_user_password_command_handler, "admin");
 local delete_user_desc = adhoc_new("Delete User", "http://jabber.org/protocol/admin#delete-user", delete_user_command_handler, "admin");
 local get_user_password_desc = adhoc_new("Get User Password", "http://jabber.org/protocol/admin#get-user-password", get_user_password_handler, "admin");
 local get_online_users_desc = adhoc_new("Get List of Online Users", "http://jabber.org/protocol/admin#get-online-users", get_online_users_command_handler, "admin"); 
 local announce_desc = adhoc_new("Send Announcement to Online Users", "http://jabber.org/protocol/admin#announce", announce_handler, "admin");
 
 module:add_item("adhoc", add_user_desc);
+module:add_item("adhoc", change_user_password_desc);
 module:add_item("adhoc", delete_user_desc);
 module:add_item("adhoc", get_user_password_desc);
 module:add_item("adhoc", get_online_users_desc);