mod_listusers/mod_listusers.lua
author Matthew Wild <mwild1@gmail.com>
Fri, 23 Sep 2022 22:41:15 +0100
changeset 5058 62480053c87b
parent 1056 b307b72ae527
permissions -rw-r--r--
mod_cloud_notify_encrypted: Additional debug logging when enabling/skipping
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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