diff -r 5bc706c2db8f -r d6a3201a65c0 mod_http_admin_api/mod_http_admin_api.lua --- a/mod_http_admin_api/mod_http_admin_api.lua Mon Mar 22 17:52:28 2021 +0100 +++ b/mod_http_admin_api/mod_http_admin_api.lua Mon Mar 22 21:32:43 2021 +0100 @@ -2,6 +2,7 @@ local json = require "util.json"; local st = require "util.stanza"; +local array = require "util.array"; module:depends("http"); @@ -174,9 +175,21 @@ end end + local roles = nil; + if usermanager.get_roles then + local roles_map = usermanager.get_roles(username.."@"..module.host, module.host) + roles = array() + if roles_map then + for role in pairs(roles_map) do + roles:push(role) + end + end + end + return { username = username; display_name = display_name; + roles = roles; }; end @@ -392,6 +405,23 @@ final_user.display_name = new_user.display_name; end end + + if new_user.roles then + if not usermanager.set_roles then + return 500, "feature-not-implemented" + end + + local backend_roles = {}; + for _, role in ipairs(new_user.roles) do + backend_roles[role] = true; + end + local jid = username.."@"..module.host; + if not usermanager.set_roles(jid, module.host, backend_roles) then + module:log("error", "failed to set roles %q for %s", backend_roles, jid) + return 500 + end + end + return 200; end