Mercurial > prosody-modules
comparison mod_http_admin_api/mod_http_admin_api.lua @ 5784:5c589fab6f53
mod_http_admin_api: Support PATCH for user enabled status
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Thu, 07 Dec 2023 15:41:55 +0000 |
| parents | 6c8cf3ecb885 |
| children | 671a6ad1f026 |
comparison
equal
deleted
inserted
replaced
| 5783:6c8cf3ecb885 | 5784:5c589fab6f53 |
|---|---|
| 1 local usermanager = require "core.usermanager"; | 1 local usermanager = require "core.usermanager"; |
| 2 | 2 |
| 3 local array = require "util.array"; | |
| 4 local it = require "util.iterators"; | |
| 3 local jid = require "util.jid"; | 5 local jid = require "util.jid"; |
| 4 local it = require "util.iterators"; | |
| 5 local json = require "util.json"; | 6 local json = require "util.json"; |
| 7 local set = require "util.set"; | |
| 6 local st = require "util.stanza"; | 8 local st = require "util.stanza"; |
| 7 local array = require "util.array"; | |
| 8 local statsmanager = require "core.statsmanager"; | 9 local statsmanager = require "core.statsmanager"; |
| 9 | 10 |
| 10 module:depends("http"); | 11 module:depends("http"); |
| 11 | 12 |
| 12 local announce = module:depends("announce"); | 13 local announce = module:depends("announce"); |
| 442 return true; | 443 return true; |
| 443 end; | 444 end; |
| 444 }; | 445 }; |
| 445 local writable_user_attributes = set.new(array.collect(it.keys(user_attribute_writers))); | 446 local writable_user_attributes = set.new(array.collect(it.keys(user_attribute_writers))); |
| 446 | 447 |
| 448 function patch_user(event, username) | |
| 449 if not username then return; end | |
| 450 | |
| 451 local current_user = get_user_info(username); | |
| 452 if not current_user then return 404; end | |
| 453 | |
| 454 local request = event.request; | |
| 455 if request.headers.content_type ~= json_content_type | |
| 456 or (not request.body or #request.body == 0) then | |
| 457 return 400; | |
| 458 end | |
| 459 local new_user = json.decode(event.request.body); | |
| 460 if not new_user then | |
| 461 return 400; | |
| 462 end | |
| 463 | |
| 464 local updated_attributes = set.new(array.collect(it.keys(new_user))); | |
| 465 if not (updated_attributes - writable_user_attributes):empty() then | |
| 466 module:log("warn", "Unable to service PATCH user request, unsupported attributes: %s", (updated_attributes - writable_user_attributes)); | |
| 467 return 400; | |
| 468 end | |
| 469 | |
| 470 if new_user.enabled ~= nil and new_user.enabled ~= current_user.enabled then | |
| 471 if not user_attribute_writers.enabled(username, new_user.enabled) then | |
| 472 return 500; | |
| 473 end | |
| 474 end | |
| 475 | |
| 476 return 200; | |
| 477 end | |
| 478 | |
| 447 function update_user(event, username) | 479 function update_user(event, username) |
| 448 local current_user = get_user_info(username); | 480 local current_user = get_user_info(username); |
| 449 | 481 |
| 450 local request = event.request; | 482 local request = event.request; |
| 451 if request.headers.content_type ~= json_content_type | 483 if request.headers.content_type ~= json_content_type |
| 782 ["DELETE /invites/*"] = delete_invite; | 814 ["DELETE /invites/*"] = delete_invite; |
| 783 | 815 |
| 784 ["GET /users"] = list_users; | 816 ["GET /users"] = list_users; |
| 785 ["GET /users/*"] = get_user_by_name; | 817 ["GET /users/*"] = get_user_by_name; |
| 786 ["PUT /users/*"] = update_user; | 818 ["PUT /users/*"] = update_user; |
| 819 ["PATCH /users/*"] = patch_user; | |
| 787 ["DELETE /users/*"] = delete_user; | 820 ["DELETE /users/*"] = delete_user; |
| 788 | 821 |
| 789 ["GET /groups"] = list_groups; | 822 ["GET /groups"] = list_groups; |
| 790 ["GET /groups/*"] = get_group_by_id; | 823 ["GET /groups/*"] = get_group_by_id; |
| 791 ["POST /groups"] = create_group; | 824 ["POST /groups"] = create_group; |
