Mercurial > prosody-modules
comparison mod_adhoc_cmd_admin/mod_adhoc_cmd_admin.lua @ 171:d15c7d86db11
mod_adhoc_cmd_admin: Check whether action is to be performed on the host the command was sent to.
author | Florian Zeitz <florob@babelmonkeys.de> |
---|---|
date | Sat, 12 Jun 2010 23:58:10 +0200 |
parents | b3a68e71b8a1 |
children | 648c24de9040 |
comparison
equal
deleted
inserted
replaced
170:0d438a7ac4fc | 171:d15c7d86db11 |
---|---|
13 | 13 |
14 local usermanager_user_exists = require "core.usermanager".user_exists; | 14 local usermanager_user_exists = require "core.usermanager".user_exists; |
15 local usermanager_create_user = require "core.usermanager".create_user; | 15 local usermanager_create_user = require "core.usermanager".create_user; |
16 local usermanager_get_password = require "core.usermanager".get_password; | 16 local usermanager_get_password = require "core.usermanager".get_password; |
17 local usermanager_set_password = require "core.usermanager".set_password or | 17 local usermanager_set_password = require "core.usermanager".set_password or |
18 function (username, host, password) return usermanager_create_user(username, password, host) end; | 18 function (username, password, host) return usermanager_create_user(username, password, host) end; |
19 local is_admin = require "core.usermanager".is_admin; | 19 local is_admin = require "core.usermanager".is_admin; |
20 | 20 |
21 local rm_load_roster = require "core.rostermanager".load_roster; | 21 local rm_load_roster = require "core.rostermanager".load_roster; |
22 | 22 |
23 local st, jid, uuid = require "util.stanza", require "util.jid", require "util.uuid"; | 23 local st, jid, uuid = require "util.stanza", require "util.jid", require "util.uuid"; |
147 if data.action == "cancel" then | 147 if data.action == "cancel" then |
148 return { status = "canceled" }; | 148 return { status = "canceled" }; |
149 end | 149 end |
150 local fields = add_user_layout:data(data.form); | 150 local fields = add_user_layout:data(data.form); |
151 local username, host, resource = jid.split(fields.accountjid); | 151 local username, host, resource = jid.split(fields.accountjid); |
152 if (fields["password"] == fields["password-verify"]) and username and host and host == data.to then | 152 if data.to ~= host then |
153 return { status = "completed", error = { message = "Trying to add a user on " .. host .. " but command was sent to " .. data.to}}; | |
154 end | |
155 if (fields["password"] == fields["password-verify"]) and username and host then | |
153 if usermanager_user_exists(username, host) then | 156 if usermanager_user_exists(username, host) then |
154 return { status = "completed", error = { message = "Account already exists" } }; | 157 return { status = "completed", error = { message = "Account already exists" } }; |
155 else | 158 else |
156 if usermanager_create_user(username, fields.password, host) then | 159 if usermanager_create_user(username, fields.password, host) then |
157 module:log("info", "Created new account " .. username.."@"..host); | 160 module:log("info", "Created new account " .. username.."@"..host); |
175 if data.action == "cancel" then | 178 if data.action == "cancel" then |
176 return { status = "canceled" }; | 179 return { status = "canceled" }; |
177 end | 180 end |
178 local fields = change_user_password_layout:data(data.form); | 181 local fields = change_user_password_layout:data(data.form); |
179 local username, host, resource = jid.split(fields.accountjid); | 182 local username, host, resource = jid.split(fields.accountjid); |
180 if usermanager_user_exists(username, host) and usermanager_set_password(username, host, fields.password) then | 183 if data.to ~= host then |
184 return { status = "completed", error = { message = "Trying to change the password of a user on " .. host .. " but command was sent to " .. data.to}}; | |
185 end | |
186 if usermanager_user_exists(username, host) and usermanager_set_password(username, fields.password, host) then | |
181 return { status = "completed", info = "Password successfully changed" }; | 187 return { status = "completed", info = "Password successfully changed" }; |
182 else | 188 else |
183 return { status = "completed", error = { message = "User does not exist" } }; | 189 return { status = "completed", error = { message = "User does not exist" } }; |
184 end | 190 end |
185 else | 191 else |
208 local fields = delete_user_layout:data(data.form); | 214 local fields = delete_user_layout:data(data.form); |
209 local failed = {}; | 215 local failed = {}; |
210 local succeeded = {}; | 216 local succeeded = {}; |
211 for _, aJID in ipairs(fields.accountjids) do | 217 for _, aJID in ipairs(fields.accountjids) do |
212 local username, host, resource = jid.split(aJID); | 218 local username, host, resource = jid.split(aJID); |
213 if usermanager_user_exists(username, host) and disconnect_user(aJID) and usermanager_create_user(username, nil, host) then | 219 if (host == data.to) and usermanager_user_exists(username, host) and disconnect_user(aJID) and usermanager_create_user(username, nil, host) then |
214 module:log("debug", "User " .. aJID .. " has been deleted"); | 220 module:log("debug", "User " .. aJID .. " has been deleted"); |
215 succeeded[#succeeded+1] = aJID; | 221 succeeded[#succeeded+1] = aJID; |
216 else | 222 else |
217 module:log("debug", "Tried to delete non-existant user "..aJID); | 223 module:log("debug", "Tried to delete non-existant user "..aJID); |
218 failed[#failed+1] = aJID; | 224 failed[#failed+1] = aJID; |
232 if data.action == "cancel" then | 238 if data.action == "cancel" then |
233 return { status = "canceled" }; | 239 return { status = "canceled" }; |
234 end | 240 end |
235 | 241 |
236 local fields = end_user_session_layout:data(data.form); | 242 local fields = end_user_session_layout:data(data.form); |
237 | 243 local failed = {}; |
244 local succeeded = {}; | |
238 for _, aJID in ipairs(fields.accountjids) do | 245 for _, aJID in ipairs(fields.accountjids) do |
239 disconnect_user(aJID); | 246 local username, host, resource = jid.split(aJID); |
240 end | 247 if (host == data.to) and usermanager_user_exists(username, host) and disconnect_user(aJID) then |
241 return { status = "completed", info = "User(s) have been disconnected" }; | 248 succeeded[#succeeded+1] = aJID; |
249 else | |
250 failed[#failed+1] = aJID; | |
251 end | |
252 end | |
253 return {status = "completed", info = (#succeeded ~= 0 and | |
254 "The following accounts were successfully disconnected:\n"..t_concat(succeeded, "\n").."\n" or "").. | |
255 (#failed ~= 0 and | |
256 "The following accounts could not be disconnected:\n"..t_concat(failed, "\n") or "") }; | |
242 else | 257 else |
243 return { status = "executing", form = end_user_session_layout }, "executing"; | 258 return { status = "executing", form = end_user_session_layout }, "executing"; |
244 end | 259 end |
245 end | 260 end |
246 | 261 |
251 end | 266 end |
252 local fields = get_user_password_layout:data(data.form); | 267 local fields = get_user_password_layout:data(data.form); |
253 local user, host, resource = jid.split(fields.accountjid); | 268 local user, host, resource = jid.split(fields.accountjid); |
254 local accountjid = ""; | 269 local accountjid = ""; |
255 local password = ""; | 270 local password = ""; |
256 if usermanager_user_exists(user, host) then | 271 if host ~= data.to then |
272 return { status = "completed", error = { message = "Tried to get password for a user on " .. host .. " but command was sent to " .. data.to } }; | |
273 elseif usermanager_user_exists(user, host) then | |
257 accountjid = fields.accountjid; | 274 accountjid = fields.accountjid; |
258 password = usermanager_get_password(user, host); | 275 password = usermanager_get_password(user, host); |
259 else | 276 else |
260 return { status = "completed", error = { message = "User does not exist" } }; | 277 return { status = "completed", error = { message = "User does not exist" } }; |
261 end | 278 end |
272 end | 289 end |
273 | 290 |
274 local fields = add_user_layout:data(data.form); | 291 local fields = add_user_layout:data(data.form); |
275 | 292 |
276 local user, host, resource = jid.split(fields.accountjid); | 293 local user, host, resource = jid.split(fields.accountjid); |
277 if not usermanager_user_exists(user, host) then | 294 if host ~= data.to then |
295 return { status = "completed", error = { message = "Tried to get roster for a user on " .. host .. " but command was sent to " .. data.to } }; | |
296 elseif not usermanager_user_exists(user, host) then | |
278 return { status = "completed", error = { message = "User does not exist" } }; | 297 return { status = "completed", error = { message = "User does not exist" } }; |
279 end | 298 end |
280 local roster = rm_load_roster(user, host); | 299 local roster = rm_load_roster(user, host); |
281 | 300 |
282 local query = st.stanza("query", { xmlns = "jabber:iq:roster" }); | 301 local query = st.stanza("query", { xmlns = "jabber:iq:roster" }); |
313 end | 332 end |
314 | 333 |
315 local fields = get_user_stats_layout:data(data.form); | 334 local fields = get_user_stats_layout:data(data.form); |
316 | 335 |
317 local user, host, resource = jid.split(fields.accountjid); | 336 local user, host, resource = jid.split(fields.accountjid); |
318 if not usermanager_user_exists(user, host) then | 337 if host ~= data.to then |
338 return { status = "completed", error = { message = "Tried to get stats for a user on " .. host .. " but command was sent to " .. data.to } }; | |
339 elseif not usermanager_user_exists(user, host) then | |
319 return { status = "completed", error = { message = "User does not exist" } }; | 340 return { status = "completed", error = { message = "User does not exist" } }; |
320 end | 341 end |
321 local roster = rm_load_roster(user, host); | 342 local roster = rm_load_roster(user, host); |
322 local rostersize = 0; | 343 local rostersize = 0; |
323 local IPs = ""; | 344 local IPs = ""; |