Mercurial > prosody-modules
comparison mod_adhoc_cmd_admin/mod_adhoc_cmd_admin.lua @ 128:bdd1641c159d
mod_adhoc_cmd_admin: Add "End User Session" command. Also end sessions before deleting a user
| author | Florian Zeitz <florob@babelmonkeys.de> |
|---|---|
| date | Fri, 29 Jan 2010 02:49:28 +0100 |
| parents | 843cadf36306 |
| children | 8945153321a1 |
comparison
equal
deleted
inserted
replaced
| 127:6c454d7208ae | 128:bdd1641c159d |
|---|---|
| 44 title = "Deleting a User"; | 44 title = "Deleting a User"; |
| 45 instructions = "Fill out this form to delete a user."; | 45 instructions = "Fill out this form to delete a user."; |
| 46 | 46 |
| 47 { name = "FORM_TYPE", type = "hidden", value = "http://jabber.org/protocol/admin" }; | 47 { name = "FORM_TYPE", type = "hidden", value = "http://jabber.org/protocol/admin" }; |
| 48 { name = "accountjids", type = "jid-multi", label = "The Jabber ID(s) to delete" }; | 48 { name = "accountjids", type = "jid-multi", label = "The Jabber ID(s) to delete" }; |
| 49 }; | |
| 50 | |
| 51 local end_user_session_layout = dataforms_new{ | |
| 52 title = "Ending a User Session"; | |
| 53 instructions = "Fill out this form to end a user's session."; | |
| 54 | |
| 55 { name = "FORM_TYPE", type = "hidden", value = "http://jabber.org/protocol/admin" }; | |
| 56 { name = "accountjids", type = "jid-multi", label = "The Jabber ID(s) for which to end sessions" }; | |
| 49 }; | 57 }; |
| 50 | 58 |
| 51 local get_user_password_layout = dataforms_new{ | 59 local get_user_password_layout = dataforms_new{ |
| 52 title = "Getting User's Password"; | 60 title = "Getting User's Password"; |
| 53 instructions = "Fill out this form to get a user's password."; | 61 instructions = "Fill out this form to get a user's password."; |
| 129 else | 137 else |
| 130 return { status = "executing", form = change_user_password_layout }, "executing"; | 138 return { status = "executing", form = change_user_password_layout }, "executing"; |
| 131 end | 139 end |
| 132 end | 140 end |
| 133 | 141 |
| 142 function disconnect_user(match_jid) | |
| 143 local node, hostname, givenResource = jid.split(match_jid); | |
| 144 local host = hosts[hostname]; | |
| 145 local sessions = host.sessions[node] and host.sessions[node].sessions; | |
| 146 for resource, session in pairs(sessions or {}) do | |
| 147 if not givenResource or (resource == givenResource) then | |
| 148 module:log("debug", "Disconnecting "..node.."@"..hostname.."/"..resource); | |
| 149 session:close(); | |
| 150 end | |
| 151 end | |
| 152 return true; | |
| 153 end | |
| 154 | |
| 134 function delete_user_command_handler(self, data, state) | 155 function delete_user_command_handler(self, data, state) |
| 135 if state then | 156 if state then |
| 136 if data.action == "cancel" then | 157 if data.action == "cancel" then |
| 137 return { status = "canceled" }; | 158 return { status = "canceled" }; |
| 138 end | 159 end |
| 139 local fields = delete_user_layout:data(data.form); | 160 local fields = delete_user_layout:data(data.form); |
| 140 local failed = {}; | 161 local failed = {}; |
| 141 local succeeded = {}; | 162 local succeeded = {}; |
| 142 for _, aJID in ipairs(fields.accountjids) do | 163 for _, aJID in ipairs(fields.accountjids) do |
| 143 local username, host, resource = jid.split(aJID); | 164 local username, host, resource = jid.split(aJID); |
| 144 if usermanager_user_exists(username, host) and usermanager_create_user(username, nil, host) then | 165 if usermanager_user_exists(username, host) and disconnect_user(aJID) and usermanager_create_user(username, nil, host) then |
| 145 module:log("debug", "User " .. aJID .. " has been deleted"); | 166 module:log("debug", "User " .. aJID .. " has been deleted"); |
| 146 succeeded[#succeeded+1] = aJID; | 167 succeeded[#succeeded+1] = aJID; |
| 147 else | 168 else |
| 148 module:log("debug", "Tried to delete non-existant user "..aJID); | 169 module:log("debug", "Tried to delete non-existant user "..aJID); |
| 149 failed[#failed+1] = aJID; | 170 failed[#failed+1] = aJID; |
| 153 "The following accounts were successfully deleted:\n"..t_concat(succeeded, "\n").."\n" or "").. | 174 "The following accounts were successfully deleted:\n"..t_concat(succeeded, "\n").."\n" or "").. |
| 154 (#failed ~= 0 and | 175 (#failed ~= 0 and |
| 155 "The following accounts could not be deleted:\n"..t_concat(failed, "\n") or "") }; | 176 "The following accounts could not be deleted:\n"..t_concat(failed, "\n") or "") }; |
| 156 else | 177 else |
| 157 return { status = "executing", form = delete_user_layout }, "executing"; | 178 return { status = "executing", form = delete_user_layout }, "executing"; |
| 179 end | |
| 180 end | |
| 181 | |
| 182 function end_user_session_handler(self, data, state) | |
| 183 if state then | |
| 184 if data.action == "cancel" then | |
| 185 return { status = "canceled" }; | |
| 186 end | |
| 187 | |
| 188 local fields = end_user_session_layout:data(data.form); | |
| 189 | |
| 190 for _, aJID in ipairs(fields.accountjids) do | |
| 191 disconnect_user(aJID); | |
| 192 end | |
| 193 return { status = "completed", info = "User(s) have been disconnected" }; | |
| 194 else | |
| 195 return { status = "executing", form = end_user_session_layout }, "executing"; | |
| 158 end | 196 end |
| 159 end | 197 end |
| 160 | 198 |
| 161 function get_user_password_handler(self, data, state) | 199 function get_user_password_handler(self, data, state) |
| 162 if state then | 200 if state then |
| 236 end | 274 end |
| 237 | 275 |
| 238 local add_user_desc = adhoc_new("Add User", "http://jabber.org/protocol/admin#add-user", add_user_command_handler, "admin"); | 276 local add_user_desc = adhoc_new("Add User", "http://jabber.org/protocol/admin#add-user", add_user_command_handler, "admin"); |
| 239 local change_user_password_desc = adhoc_new("Change User Password", "http://jabber.org/protocol/admin#change-user-password", change_user_password_command_handler, "admin"); | 277 local change_user_password_desc = adhoc_new("Change User Password", "http://jabber.org/protocol/admin#change-user-password", change_user_password_command_handler, "admin"); |
| 240 local delete_user_desc = adhoc_new("Delete User", "http://jabber.org/protocol/admin#delete-user", delete_user_command_handler, "admin"); | 278 local delete_user_desc = adhoc_new("Delete User", "http://jabber.org/protocol/admin#delete-user", delete_user_command_handler, "admin"); |
| 279 local end_user_session_desc = adhoc_new("End User Session", "http://jabber.org/protocol/admin#end-user-session", end_user_session_handler, "admin"); | |
| 241 local get_user_password_desc = adhoc_new("Get User Password", "http://jabber.org/protocol/admin#get-user-password", get_user_password_handler, "admin"); | 280 local get_user_password_desc = adhoc_new("Get User Password", "http://jabber.org/protocol/admin#get-user-password", get_user_password_handler, "admin"); |
| 242 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"); | 281 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"); |
| 243 local announce_desc = adhoc_new("Send Announcement to Online Users", "http://jabber.org/protocol/admin#announce", announce_handler, "admin"); | 282 local announce_desc = adhoc_new("Send Announcement to Online Users", "http://jabber.org/protocol/admin#announce", announce_handler, "admin"); |
| 244 | 283 |
| 245 module:add_item("adhoc", add_user_desc); | 284 module:add_item("adhoc", add_user_desc); |
| 246 module:add_item("adhoc", change_user_password_desc); | 285 module:add_item("adhoc", change_user_password_desc); |
| 247 module:add_item("adhoc", delete_user_desc); | 286 module:add_item("adhoc", delete_user_desc); |
| 287 module:add_item("adhoc", end_user_session_desc); | |
| 248 module:add_item("adhoc", get_user_password_desc); | 288 module:add_item("adhoc", get_user_password_desc); |
| 249 module:add_item("adhoc", get_online_users_desc); | 289 module:add_item("adhoc", get_online_users_desc); |
| 250 module:add_item("adhoc", announce_desc); | 290 module:add_item("adhoc", announce_desc); |
