Annotate

mod_listusers/mod_listusers.lua @ 5418:f2c7bb3af600

mod_http_oauth2: Add role selector to consent page List includes all roles available to the user, if more than one. Defaults to either the first role in the scope string or the users primary role. Earlier draft listed all roles, but having options that can't be selected is bad UX and the entire list of all roles on the server could be long, and perhaps even sensitive. Allows e.g. picking a role with fewer permissions than what might otherwise have been selected. UX wise, doing this with more checkboxes or possibly radio buttons would have been confusion and/or looked messier. Fixes the previous situation where unselecting a role would default to the primary role, which could be more permissions than requested.
author Kim Alvefur <zash@zash.se>
date Fri, 05 May 2023 01:23:13 +0200
parent 1056:b307b72ae527
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1055
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
1 function module.command(args)
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
2 local action = table.remove(args, 1);
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
3 if not action then -- Default, list registered users
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
4 local data_path = CFG_DATADIR or "data";
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
5 if not pcall(require, "luarocks.loader") then
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
6 pcall(require, "luarocks.require");
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
7 end
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
8 local lfs = require "lfs";
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
9 function decode(s)
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
10 return s:gsub("%%([a-fA-F0-9][a-fA-F0-9])", function (c)
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
11 return string.char(tonumber("0x"..c));
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
12 end);
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
13 end
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
14 for host in lfs.dir(data_path) do
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
15 local accounts = data_path.."/"..host.."/accounts";
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
16 if lfs.attributes(accounts, "mode") == "directory" then
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
17 for user in lfs.dir(accounts) do
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
18 if user:sub(1,1) ~= "." then
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
19 print(decode(user:gsub("%.dat$", "")).."@"..decode(host));
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
20 end
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
21 end
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
22 end
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
23 end
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
24 elseif action == "--connected" then -- List connected users
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
25 local socket = require "socket";
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
26 local default_local_interfaces = { };
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
27 if socket.tcp6 and config.get("*", "use_ipv6") ~= false then
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
28 table.insert(default_local_interfaces, "::1");
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
29 end
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
30 if config.get("*", "use_ipv4") ~= false then
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
31 table.insert(default_local_interfaces, "127.0.0.1");
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
32 end
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
33
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
34 local console_interfaces = config.get("*", "console_interfaces")
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
35 or config.get("*", "local_interfaces")
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
36 or default_local_interfaces
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
37 console_interfaces = type(console_interfaces)~="table"
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
38 and {console_interfaces} or console_interfaces;
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
39
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
40 local console_ports = config.get("*", "console_ports") or 5582
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
41 console_ports = type(console_ports) ~= "table" and { console_ports } or console_ports;
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
42
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
43 local st, conn = pcall(assert,socket.connect(console_interfaces[1], console_ports[1]));
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
44 if (not st) then print("Error"..(conn and ": "..conn or "")); return 1; end
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
45
1056
b307b72ae527 mod_listusers: fixed banner skipping cycle
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 1055
diff changeset
46 local banner = config.get("*", "console_banner");
b307b72ae527 mod_listusers: fixed banner skipping cycle
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 1055
diff changeset
47 if (
b307b72ae527 mod_listusers: fixed banner skipping cycle
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 1055
diff changeset
48 (not banner) or
b307b72ae527 mod_listusers: fixed banner skipping cycle
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 1055
diff changeset
49 (
b307b72ae527 mod_listusers: fixed banner skipping cycle
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 1055
diff changeset
50 (type(banner) == "string") and
b307b72ae527 mod_listusers: fixed banner skipping cycle
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 1055
diff changeset
51 (banner:match("^| (.+)$"))
b307b72ae527 mod_listusers: fixed banner skipping cycle
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 1055
diff changeset
52 )
b307b72ae527 mod_listusers: fixed banner skipping cycle
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 1055
diff changeset
53 ) then
b307b72ae527 mod_listusers: fixed banner skipping cycle
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 1055
diff changeset
54 repeat
b307b72ae527 mod_listusers: fixed banner skipping cycle
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 1055
diff changeset
55 local rec_banner = conn:receive()
b307b72ae527 mod_listusers: fixed banner skipping cycle
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 1055
diff changeset
56 until
b307b72ae527 mod_listusers: fixed banner skipping cycle
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 1055
diff changeset
57 rec_banner == "" or
b307b72ae527 mod_listusers: fixed banner skipping cycle
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 1055
diff changeset
58 rec_banner == nil; -- skip banner
b307b72ae527 mod_listusers: fixed banner skipping cycle
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 1055
diff changeset
59 end
b307b72ae527 mod_listusers: fixed banner skipping cycle
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 1055
diff changeset
60
1055
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
61 conn:send("c2s:show()\n");
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
62 conn:settimeout(1); -- Only hit in case of failure
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
63
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
64 repeat local line = conn:receive()
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
65 if not line then break; end
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
66 local jid = line:match("^| (.+)$");
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
67 if jid then
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
68 jid = jid:gsub(" %- (%w+%(%d+%))$", "\t%1");
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
69 print(jid);
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
70 elseif line:match("^| OK:") then
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
71 return 0;
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
72 end
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
73 until false;
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
74 end
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
75 return 0;
3dd909e87143 mod_listusers: added (+config support; -assert tracebacks; +user friendly connection errors; -unneded repeat-until cycle, which braked module)
Vadim Misbakh-Soloviov <mva@mva.name>
parents:
diff changeset
76 end