# HG changeset patch # User Jonas Schäfer # Date 1612116996 -3600 # Node ID 94805a7e7b30ffee336b8775e18912d8a3a81e55 # Parent a815169068225f37e2a79c18a12c93a5270475fe mod_invites: rework CLI parsing to support groups To make this sensible, the code had to move from rather simple parsing to something which looks more like getopt or your typical shell script. diff -r a81516906822 -r 94805a7e7b30 mod_invites/mod_invites.lua --- a/mod_invites/mod_invites.lua Sun Jan 31 16:12:47 2021 +0100 +++ b/mod_invites/mod_invites.lua Sun Jan 31 19:16:36 2021 +0100 @@ -234,7 +234,7 @@ function module.command(arg) if #arg < 2 or arg[1] ~= "generate" then print("usage: prosodyctl mod_"..module.name.." generate example.com"); - return; + return 2; end table.remove(arg, 1); -- pop command @@ -255,23 +255,60 @@ module:depends(invites_page_module); end + local allow_reset; + local roles; + local groups = {}; - local invite, roles; - if arg[1] == "--reset" then - local nodeprep = require "util.encodings".stringprep.nodeprep; - local username = nodeprep(arg[2]); - if not username then - print("Please supply a valid username to generate a reset link for"); - return; + while #arg > 0 do + local value = arg[1]; + table.remove(arg, 1); + if value == "--reset" then + local nodeprep = require "util.encodings".stringprep.nodeprep; + local username = nodeprep(arg[1]) + table.remove(arg, 1); + if not username then + print("Please supply a valid username to generate a reset link for"); + return 2; + end + allow_reset = username; + elseif value == "--admin" then + roles = { ["prosody:admin"] = true }; + elseif value == "--role" then + local rolename = arg[1]; + if not rolename then + print("Please supply a role name"); + return 2; + end + roles = { [rolename] = true }; + table.remove(arg, 1); + elseif value == "--group" or value == "-g" then + local groupid = arg[1]; + if not groupid then + print("Please supply a group ID") + return 2; + end + table.insert(groups, groupid); + table.remove(arg, 1); + else + print("unexpected argument: "..value) end - invite = assert(invites.create_account_reset(username)); + end + + local invite; + if allow_reset then + if roles then + print("--role/--admin and --reset are mutually exclusive") + return 2; + end + if #groups > 0 then + print("--group and --reset are mutually exclusive") + end + invite = assert(invites.create_account_reset(allow_reset)); else - if arg[1] == "--admin" then - roles = { ["prosody:admin"] = true }; - elseif arg[1] == "--role" then - roles = { [arg[2]] = true }; - end - invite = assert(invites.create_account(nil, { roles = roles })); + invite = assert(invites.create_account(nil, { + roles = roles, + groups = groups + })); end print(invite.landing_page or invite.uri);