mod_http_admin_api/mod_http_admin_api.lua
changeset 4521 d6a3201a65c0
parent 4520 5bc706c2db8f
child 4580 cade5dac1003
--- 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