Mercurial > prosody-modules
comparison mod_http_admin_api/mod_http_admin_api.lua @ 4517:d6a3201a65c0
mod_http_admin_api: support for updating user roles via the API
Requires the most recent of the recent prosody-trunks.
| author | Jonas Schäfer <jonas@wielicki.name> |
|---|---|
| date | Mon, 22 Mar 2021 21:32:43 +0100 |
| parents | 5bc706c2db8f |
| children | cade5dac1003 |
comparison
equal
deleted
inserted
replaced
| 4516:5bc706c2db8f | 4517:d6a3201a65c0 |
|---|---|
| 1 local usermanager = require "core.usermanager"; | 1 local usermanager = require "core.usermanager"; |
| 2 | 2 |
| 3 local json = require "util.json"; | 3 local json = require "util.json"; |
| 4 local st = require "util.stanza"; | 4 local st = require "util.stanza"; |
| 5 local array = require "util.array"; | |
| 5 | 6 |
| 6 module:depends("http"); | 7 module:depends("http"); |
| 7 | 8 |
| 8 local invites = module:depends("invites"); | 9 local invites = module:depends("invites"); |
| 9 local tokens = module:depends("tokenauth"); | 10 local tokens = module:depends("tokenauth"); |
| 172 if ok and nick_item then | 173 if ok and nick_item then |
| 173 display_name = nick_item:get_child_text("nick", xmlns_nick); | 174 display_name = nick_item:get_child_text("nick", xmlns_nick); |
| 174 end | 175 end |
| 175 end | 176 end |
| 176 | 177 |
| 178 local roles = nil; | |
| 179 if usermanager.get_roles then | |
| 180 local roles_map = usermanager.get_roles(username.."@"..module.host, module.host) | |
| 181 roles = array() | |
| 182 if roles_map then | |
| 183 for role in pairs(roles_map) do | |
| 184 roles:push(role) | |
| 185 end | |
| 186 end | |
| 187 end | |
| 188 | |
| 177 return { | 189 return { |
| 178 username = username; | 190 username = username; |
| 179 display_name = display_name; | 191 display_name = display_name; |
| 192 roles = roles; | |
| 180 }; | 193 }; |
| 181 end | 194 end |
| 182 | 195 |
| 183 local function get_session_debug_info(session) | 196 local function get_session_debug_info(session) |
| 184 local info = { | 197 local info = { |
| 390 _defaults_only = true; | 403 _defaults_only = true; |
| 391 }) then | 404 }) then |
| 392 final_user.display_name = new_user.display_name; | 405 final_user.display_name = new_user.display_name; |
| 393 end | 406 end |
| 394 end | 407 end |
| 408 | |
| 409 if new_user.roles then | |
| 410 if not usermanager.set_roles then | |
| 411 return 500, "feature-not-implemented" | |
| 412 end | |
| 413 | |
| 414 local backend_roles = {}; | |
| 415 for _, role in ipairs(new_user.roles) do | |
| 416 backend_roles[role] = true; | |
| 417 end | |
| 418 local jid = username.."@"..module.host; | |
| 419 if not usermanager.set_roles(jid, module.host, backend_roles) then | |
| 420 module:log("error", "failed to set roles %q for %s", backend_roles, jid) | |
| 421 return 500 | |
| 422 end | |
| 423 end | |
| 424 | |
| 395 return 200; | 425 return 200; |
| 396 end | 426 end |
| 397 | 427 |
| 398 function delete_user(event, username) --luacheck: ignore 212/event | 428 function delete_user(event, username) --luacheck: ignore 212/event |
| 399 if not usermanager.delete_user(username, module.host) then | 429 if not usermanager.delete_user(username, module.host) then |
