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; |