Comparison

plugins/mod_admin_shell.lua @ 12012:71d799a8638f

mod_admin_shell: Allow setting roles when creating user
author Kim Alvefur <zash@zash.se>
date Sat, 04 Dec 2021 02:25:01 +0100
parent 11991:bef2a59b00d1
child 12013:ae45f052b34b
comparison
equal deleted inserted replaced
12011:9dc36fdbdba1 12012:71d799a8638f
246 elseif section == "host" then 246 elseif section == "host" then
247 print [[host:activate(hostname) - Activates the specified host]] 247 print [[host:activate(hostname) - Activates the specified host]]
248 print [[host:deactivate(hostname) - Disconnects all clients on this host and deactivates]] 248 print [[host:deactivate(hostname) - Disconnects all clients on this host and deactivates]]
249 print [[host:list() - List the currently-activated hosts]] 249 print [[host:list() - List the currently-activated hosts]]
250 elseif section == "user" then 250 elseif section == "user" then
251 print [[user:create(jid, password) - Create the specified user account]] 251 print [[user:create(jid, password, roles) - Create the specified user account]]
252 print [[user:password(jid, password) - Set the password for the specified user account]] 252 print [[user:password(jid, password) - Set the password for the specified user account]]
253 print [[user:delete(jid) - Permanently remove the specified user account]] 253 print [[user:delete(jid) - Permanently remove the specified user account]]
254 print [[user:list(hostname, pattern) - List users on the specified host, optionally filtering with a pattern]] 254 print [[user:list(hostname, pattern) - List users on the specified host, optionally filtering with a pattern]]
255 elseif section == "muc" then 255 elseif section == "muc" then
256 -- TODO `muc:room():foo()` commands 256 -- TODO `muc:room():foo()` commands
1268 end 1268 end
1269 1269
1270 local um = require"core.usermanager"; 1270 local um = require"core.usermanager";
1271 1271
1272 def_env.user = {}; 1272 def_env.user = {};
1273 function def_env.user:create(jid, password) 1273 function def_env.user:create(jid, password, roles)
1274 local username, host = jid_split(jid); 1274 local username, host = jid_split(jid);
1275 if not prosody.hosts[host] then 1275 if not prosody.hosts[host] then
1276 return nil, "No such host: "..host; 1276 return nil, "No such host: "..host;
1277 elseif um.user_exists(username, host) then 1277 elseif um.user_exists(username, host) then
1278 return nil, "User exists"; 1278 return nil, "User exists";
1279 end 1279 end
1280 local ok, err = um.create_user(username, password, host); 1280 local ok, err = um.create_user(username, password, host);
1281 if ok then 1281 if ok then
1282 if ok and roles then
1283 if roles == "admin" then roles = "prosody:admin"; end
1284 if type(roles) == "string" then roles = { [roles] = true }; end
1285 if roles[1] then for i, role in ipairs(roles) do roles[role], roles[i] = true, nil; end end
1286 local roles_ok, rerr = um.set_roles(jid, host, roles);
1287 if not roles_ok then return nil, "User created, but could not set roles: " .. tostring(rerr); end
1288 end
1282 return true, "User created"; 1289 return true, "User created";
1283 else 1290 else
1284 return nil, "Could not create user: "..err; 1291 return nil, "Could not create user: "..err;
1285 end 1292 end
1286 end 1293 end
1313 else 1320 else
1314 return nil, "Could not change password for user: "..err; 1321 return nil, "Could not change password for user: "..err;
1315 end 1322 end
1316 end 1323 end
1317 1324
1325 -- TODO user:roles(jid, new_roles)
1326
1327 -- TODO switch to table view, include roles
1318 function def_env.user:list(host, pat) 1328 function def_env.user:list(host, pat)
1319 if not host then 1329 if not host then
1320 return nil, "No host given"; 1330 return nil, "No host given";
1321 elseif not prosody.hosts[host] then 1331 elseif not prosody.hosts[host] then
1322 return nil, "No such host"; 1332 return nil, "No such host";