Mercurial > prosody-hg
comparison plugins/mod_admin_adhoc.lua @ 4932:212e81ac6ebb
mod_admin_web: Use util.dataforms' own error checking
| author | Florian Zeitz <florob@babelmonkeys.de> |
|---|---|
| date | Thu, 05 Jul 2012 00:15:49 +0200 |
| parents | 58714123f600 |
| children | bc26e6d519ae |
comparison
equal
deleted
inserted
replaced
| 4931:7a4f00168260 | 4932:212e81ac6ebb |
|---|---|
| 25 local modulemanager = require "modulemanager"; | 25 local modulemanager = require "modulemanager"; |
| 26 | 26 |
| 27 module:depends("adhoc"); | 27 module:depends("adhoc"); |
| 28 local adhoc_new = module:require "adhoc".new; | 28 local adhoc_new = module:require "adhoc".new; |
| 29 | 29 |
| 30 local function generate_error_message(errors) | |
| 31 local errmsg = {}; | |
| 32 for name, err in pairs(errors) do | |
| 33 errmsg[#errmsg + 1] = name .. ": " .. err; | |
| 34 end | |
| 35 return { status = "completed", error = { message = t_concat(errmsg, "\n") } }; | |
| 36 end | |
| 37 | |
| 30 function add_user_command_handler(self, data, state) | 38 function add_user_command_handler(self, data, state) |
| 31 local add_user_layout = dataforms_new{ | 39 local add_user_layout = dataforms_new{ |
| 32 title = "Adding a User"; | 40 title = "Adding a User"; |
| 33 instructions = "Fill out this form to add a user."; | 41 instructions = "Fill out this form to add a user."; |
| 34 | 42 |
| 40 | 48 |
| 41 if state then | 49 if state then |
| 42 if data.action == "cancel" then | 50 if data.action == "cancel" then |
| 43 return { status = "canceled" }; | 51 return { status = "canceled" }; |
| 44 end | 52 end |
| 45 local fields = add_user_layout:data(data.form); | 53 local fields, err = add_user_layout:data(data.form); |
| 46 if not fields.accountjid then | 54 if err then |
| 47 return { status = "completed", error = { message = "You need to specify a JID." } }; | 55 return generate_error_message(err); |
| 48 end | 56 end |
| 49 local username, host, resource = jid.split(fields.accountjid); | 57 local username, host, resource = jid.split(fields.accountjid); |
| 50 if data.to ~= host then | 58 if data.to ~= host then |
| 51 return { status = "completed", error = { message = "Trying to add a user on " .. host .. " but command was sent to " .. data.to}}; | 59 return { status = "completed", error = { message = "Trying to add a user on " .. host .. " but command was sent to " .. data.to}}; |
| 52 end | 60 end |
| 83 | 91 |
| 84 if state then | 92 if state then |
| 85 if data.action == "cancel" then | 93 if data.action == "cancel" then |
| 86 return { status = "canceled" }; | 94 return { status = "canceled" }; |
| 87 end | 95 end |
| 88 local fields = change_user_password_layout:data(data.form); | 96 local fields, err = change_user_password_layout:data(data.form); |
| 89 if not fields.accountjid or fields.accountjid == "" or not fields.password then | 97 if err then |
| 90 return { status = "completed", error = { message = "Please specify username and password" } }; | 98 return generate_error_message(err); |
| 91 end | 99 end |
| 92 local username, host, resource = jid.split(fields.accountjid); | 100 local username, host, resource = jid.split(fields.accountjid); |
| 93 if data.to ~= host then | 101 if data.to ~= host then |
| 94 return { status = "completed", error = { message = "Trying to change the password of a user on " .. host .. " but command was sent to " .. data.to}}; | 102 return { status = "completed", error = { message = "Trying to change the password of a user on " .. host .. " but command was sent to " .. data.to}}; |
| 95 end | 103 end |
| 124 | 132 |
| 125 if state then | 133 if state then |
| 126 if data.action == "cancel" then | 134 if data.action == "cancel" then |
| 127 return { status = "canceled" }; | 135 return { status = "canceled" }; |
| 128 end | 136 end |
| 129 local fields = delete_user_layout:data(data.form); | 137 local fields, err = delete_user_layout:data(data.form); |
| 138 if err then | |
| 139 return generate_error_message(err); | |
| 140 end | |
| 130 local failed = {}; | 141 local failed = {}; |
| 131 local succeeded = {}; | 142 local succeeded = {}; |
| 132 for _, aJID in ipairs(fields.accountjids) do | 143 for _, aJID in ipairs(fields.accountjids) do |
| 133 local username, host, resource = jid.split(aJID); | 144 local username, host, resource = jid.split(aJID); |
| 134 if (host == data.to) and usermanager_user_exists(username, host) and disconnect_user(aJID) and usermanager_create_user(username, nil, host) then | 145 if (host == data.to) and usermanager_user_exists(username, host) and disconnect_user(aJID) and usermanager_create_user(username, nil, host) then |
| 173 if state then | 184 if state then |
| 174 if data.action == "cancel" then | 185 if data.action == "cancel" then |
| 175 return { status = "canceled" }; | 186 return { status = "canceled" }; |
| 176 end | 187 end |
| 177 | 188 |
| 178 local fields = end_user_session_layout:data(data.form); | 189 local fields, err = end_user_session_layout:data(data.form); |
| 190 if err then | |
| 191 return generate_error_message(err); | |
| 192 end | |
| 179 local failed = {}; | 193 local failed = {}; |
| 180 local succeeded = {}; | 194 local succeeded = {}; |
| 181 for _, aJID in ipairs(fields.accountjids) do | 195 for _, aJID in ipairs(fields.accountjids) do |
| 182 local username, host, resource = jid.split(aJID); | 196 local username, host, resource = jid.split(aJID); |
| 183 if (host == data.to) and usermanager_user_exists(username, host) and disconnect_user(aJID) then | 197 if (host == data.to) and usermanager_user_exists(username, host) and disconnect_user(aJID) then |
| 221 | 235 |
| 222 if state then | 236 if state then |
| 223 if data.action == "cancel" then | 237 if data.action == "cancel" then |
| 224 return { status = "canceled" }; | 238 return { status = "canceled" }; |
| 225 end | 239 end |
| 226 local fields = get_user_password_layout:data(data.form); | 240 local fields, err = get_user_password_layout:data(data.form); |
| 227 if not fields.accountjid then | 241 if err then |
| 228 return { status = "completed", error = { message = "Please specify a JID." } }; | 242 return generate_error_message(err); |
| 229 end | 243 end |
| 230 local user, host, resource = jid.split(fields.accountjid); | 244 local user, host, resource = jid.split(fields.accountjid); |
| 231 local accountjid = ""; | 245 local accountjid = ""; |
| 232 local password = ""; | 246 local password = ""; |
| 233 if host ~= data.to then | 247 if host ~= data.to then |
| 259 if state then | 273 if state then |
| 260 if data.action == "cancel" then | 274 if data.action == "cancel" then |
| 261 return { status = "canceled" }; | 275 return { status = "canceled" }; |
| 262 end | 276 end |
| 263 | 277 |
| 264 local fields = get_user_roster_layout:data(data.form); | 278 local fields, err = get_user_roster_layout:data(data.form); |
| 265 | 279 |
| 266 if not fields.accountjid then | 280 if err then |
| 267 return { status = "completed", error = { message = "Please specify a JID" } }; | 281 return generate_error_message(err); |
| 268 end | 282 end |
| 269 | 283 |
| 270 local user, host, resource = jid.split(fields.accountjid); | 284 local user, host, resource = jid.split(fields.accountjid); |
| 271 if host ~= data.to then | 285 if host ~= data.to then |
| 272 return { status = "completed", error = { message = "Tried to get roster for a user on " .. host .. " but command was sent to " .. data.to } }; | 286 return { status = "completed", error = { message = "Tried to get roster for a user on " .. host .. " but command was sent to " .. data.to } }; |
| 321 if state then | 335 if state then |
| 322 if data.action == "cancel" then | 336 if data.action == "cancel" then |
| 323 return { status = "canceled" }; | 337 return { status = "canceled" }; |
| 324 end | 338 end |
| 325 | 339 |
| 326 local fields = get_user_stats_layout:data(data.form); | 340 local fields, err = get_user_stats_layout:data(data.form); |
| 327 | 341 |
| 328 if not fields.accountjid then | 342 if err then |
| 329 return { status = "completed", error = { message = "Please specify a JID." } }; | 343 return generate_error_message(err); |
| 330 end | 344 end |
| 331 | 345 |
| 332 local user, host, resource = jid.split(fields.accountjid); | 346 local user, host, resource = jid.split(fields.accountjid); |
| 333 if host ~= data.to then | 347 if host ~= data.to then |
| 334 return { status = "completed", error = { message = "Tried to get stats for a user on " .. host .. " but command was sent to " .. data.to } }; | 348 return { status = "completed", error = { message = "Tried to get stats for a user on " .. host .. " but command was sent to " .. data.to } }; |
| 374 if state then | 388 if state then |
| 375 if data.action == "cancel" then | 389 if data.action == "cancel" then |
| 376 return { status = "canceled" }; | 390 return { status = "canceled" }; |
| 377 end | 391 end |
| 378 | 392 |
| 379 local fields = get_online_users_layout:data(data.form); | 393 local fields, err = get_online_users_layout:data(data.form); |
| 394 | |
| 395 if err then | |
| 396 return generate_error_message(err); | |
| 397 end | |
| 380 | 398 |
| 381 local max_items = nil | 399 local max_items = nil |
| 382 if fields.max_items ~= "all" then | 400 if fields.max_items ~= "all" then |
| 383 max_items = tonumber(fields.max_items); | 401 max_items = tonumber(fields.max_items); |
| 384 end | 402 end |
| 434 }; | 452 }; |
| 435 if state then | 453 if state then |
| 436 if data.action == "cancel" then | 454 if data.action == "cancel" then |
| 437 return { status = "canceled" }; | 455 return { status = "canceled" }; |
| 438 end | 456 end |
| 439 local fields = layout:data(data.form); | 457 local fields, err = layout:data(data.form); |
| 440 if (not fields.module) or (fields.module == "") then | 458 if err then |
| 441 return { status = "completed", error = { | 459 return generate_error_message(err); |
| 442 message = "Please specify a module." | |
| 443 } }; | |
| 444 end | 460 end |
| 445 if modulemanager.is_loaded(data.to, fields.module) then | 461 if modulemanager.is_loaded(data.to, fields.module) then |
| 446 return { status = "completed", info = "Module already loaded" }; | 462 return { status = "completed", info = "Module already loaded" }; |
| 447 end | 463 end |
| 448 local ok, err = modulemanager.load(data.to, fields.module); | 464 local ok, err = modulemanager.load(data.to, fields.module); |
| 468 }; | 484 }; |
| 469 if state then | 485 if state then |
| 470 if data.action == "cancel" then | 486 if data.action == "cancel" then |
| 471 return { status = "canceled" }; | 487 return { status = "canceled" }; |
| 472 end | 488 end |
| 473 local fields = layout:data(data.form); | 489 local fields, err = layout:data(data.form); |
| 474 if #fields.modules == 0 then | 490 if err then |
| 475 return { status = "completed", error = { | 491 return generate_error_message(err); |
| 476 message = "Please specify a module. (This means your client misbehaved, as this field is required)" | |
| 477 } }; | |
| 478 end | 492 end |
| 479 local ok_list, err_list = {}, {}; | 493 local ok_list, err_list = {}, {}; |
| 480 for _, module in ipairs(fields.modules) do | 494 for _, module in ipairs(fields.modules) do |
| 481 local ok, err = modulemanager.reload(data.to, module); | 495 local ok, err = modulemanager.reload(data.to, module); |
| 482 if ok then | 496 if ok then |
| 536 if state then | 550 if state then |
| 537 if data.action == "cancel" then | 551 if data.action == "cancel" then |
| 538 return { status = "canceled" }; | 552 return { status = "canceled" }; |
| 539 end | 553 end |
| 540 | 554 |
| 541 local fields = shut_down_service_layout:data(data.form); | 555 local fields, err = shut_down_service_layout:data(data.form); |
| 556 | |
| 557 if err then | |
| 558 return generate_error_message(err); | |
| 559 end | |
| 542 | 560 |
| 543 if fields.announcement and #fields.announcement > 0 then | 561 if fields.announcement and #fields.announcement > 0 then |
| 544 local message = st.message({type = "headline"}, fields.announcement):up() | 562 local message = st.message({type = "headline"}, fields.announcement):up() |
| 545 :tag("subject"):text("Server is shutting down"); | 563 :tag("subject"):text("Server is shutting down"); |
| 546 send_to_online(message); | 564 send_to_online(message); |
| 564 }; | 582 }; |
| 565 if state then | 583 if state then |
| 566 if data.action == "cancel" then | 584 if data.action == "cancel" then |
| 567 return { status = "canceled" }; | 585 return { status = "canceled" }; |
| 568 end | 586 end |
| 569 local fields = layout:data(data.form); | 587 local fields, err = layout:data(data.form); |
| 570 if #fields.modules == 0 then | 588 if err then |
| 571 return { status = "completed", error = { | 589 return generate_error_message(err); |
| 572 message = "Please specify a module. (This means your client misbehaved, as this field is required)" | |
| 573 } }; | |
| 574 end | 590 end |
| 575 local ok_list, err_list = {}, {}; | 591 local ok_list, err_list = {}, {}; |
| 576 for _, module in ipairs(fields.modules) do | 592 for _, module in ipairs(fields.modules) do |
| 577 local ok, err = modulemanager.unload(data.to, module); | 593 local ok, err = modulemanager.unload(data.to, module); |
| 578 if ok then | 594 if ok then |
