# HG changeset patch # User Jonas Schäfer # Date 1616445163 -3600 # Node ID d6a3201a65c033e8f90315b07705cac6f23cfd0a # Parent 5bc706c2db8fd0d57f6a8e666cf45c4c39082aed mod_http_admin_api: support for updating user roles via the API Requires the most recent of the recent prosody-trunks. 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 diff -r 5bc706c2db8f -r d6a3201a65c0 mod_http_admin_api/openapi.yaml --- a/mod_http_admin_api/openapi.yaml Mon Mar 22 17:52:28 2021 +0100 +++ b/mod_http_admin_api/openapi.yaml Mon Mar 22 21:32:43 2021 +0100 @@ -61,7 +61,7 @@ put: tags: - user - summary: Updated user (NYI) + summary: Updated user description: Update a user operationId: updateUser parameters: