prosodyctl
author Matthew Wild <mwild1@gmail.com>
Sun, 17 Mar 2024 10:10:24 +0000
changeset 13464 a688947fab1e
parent 13171 6226f75f55a7
permissions -rwxr-xr-x
mod_bosh: Set base_type on session This fixes a traceback with mod_saslauth. Ideally we move this to util.session at some point, though.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     1
#!/usr/bin/env lua
1523
841d61be198f Remove version number from copyright headers
Matthew Wild <mwild1@gmail.com>
parents: 1501
diff changeset
     2
-- Prosody IM
3742
a18acd47904b prosodyctl: Added and updated some comments and some semicolons, to match main prosody executable.
Waqas Hussain <waqas20@gmail.com>
parents: 3741
diff changeset
     3
-- Copyright (C) 2008-2010 Matthew Wild
a18acd47904b prosodyctl: Added and updated some comments and some semicolons, to match main prosody executable.
Waqas Hussain <waqas20@gmail.com>
parents: 3741
diff changeset
     4
-- Copyright (C) 2008-2010 Waqas Hussain
7925
2fd20f372cb1 prosodyctl: Trim trailing whitespace
Kim Alvefur <zash@zash.se>
parents: 7923
diff changeset
     5
--
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     6
-- This project is MIT/X11 licensed. Please see the
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     7
-- COPYING file in the source package for more information.
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     8
--
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     9
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    10
-- prosodyctl - command-line controller for Prosody XMPP server
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    11
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    12
-- Will be modified by configure script if run --
7300
b34a42a10c9f prosody, prosodyctl: Allow setting CFG_* variables via Lua interpreter before loading Prosody. Fixes #308.
Matthew Wild <mwild1@gmail.com>
parents: 7270
diff changeset
    13
CFG_SOURCEDIR=CFG_SOURCEDIR or os.getenv("PROSODY_SRCDIR");
b34a42a10c9f prosody, prosodyctl: Allow setting CFG_* variables via Lua interpreter before loading Prosody. Fixes #308.
Matthew Wild <mwild1@gmail.com>
parents: 7270
diff changeset
    14
CFG_CONFIGDIR=CFG_CONFIGDIR or os.getenv("PROSODY_CFGDIR");
b34a42a10c9f prosody, prosodyctl: Allow setting CFG_* variables via Lua interpreter before loading Prosody. Fixes #308.
Matthew Wild <mwild1@gmail.com>
parents: 7270
diff changeset
    15
CFG_PLUGINDIR=CFG_PLUGINDIR or os.getenv("PROSODY_PLUGINDIR");
b34a42a10c9f prosody, prosodyctl: Allow setting CFG_* variables via Lua interpreter before loading Prosody. Fixes #308.
Matthew Wild <mwild1@gmail.com>
parents: 7270
diff changeset
    16
CFG_DATADIR=CFG_DATADIR or os.getenv("PROSODY_DATADIR");
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    17
3742
a18acd47904b prosodyctl: Added and updated some comments and some semicolons, to match main prosody executable.
Waqas Hussain <waqas20@gmail.com>
parents: 3741
diff changeset
    18
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    19
3999
58c0de7c6da0 prosody, prosodyctl: Filter out relative paths from package.(c)path when installed
Matthew Wild <mwild1@gmail.com>
parents: 3998
diff changeset
    20
local function is_relative(path)
58c0de7c6da0 prosody, prosodyctl: Filter out relative paths from package.(c)path when installed
Matthew Wild <mwild1@gmail.com>
parents: 3998
diff changeset
    21
	local path_sep = package.config:sub(1,1);
11888
248477e45c64 prosodyctl: Fix weird indentation
Kim Alvefur <zash@zash.se>
parents: 11816
diff changeset
    22
	return ((path_sep == "/" and path:sub(1,1) ~= "/")
248477e45c64 prosodyctl: Fix weird indentation
Kim Alvefur <zash@zash.se>
parents: 11816
diff changeset
    23
		or (path_sep == "\\" and (path:sub(1,1) ~= "/" and path:sub(2,3) ~= ":\\")))
3999
58c0de7c6da0 prosody, prosodyctl: Filter out relative paths from package.(c)path when installed
Matthew Wild <mwild1@gmail.com>
parents: 3998
diff changeset
    24
end
58c0de7c6da0 prosody, prosodyctl: Filter out relative paths from package.(c)path when installed
Matthew Wild <mwild1@gmail.com>
parents: 3998
diff changeset
    25
3742
a18acd47904b prosodyctl: Added and updated some comments and some semicolons, to match main prosody executable.
Waqas Hussain <waqas20@gmail.com>
parents: 3741
diff changeset
    26
-- Tell Lua where to find our libraries
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    27
if CFG_SOURCEDIR then
3999
58c0de7c6da0 prosody, prosodyctl: Filter out relative paths from package.(c)path when installed
Matthew Wild <mwild1@gmail.com>
parents: 3998
diff changeset
    28
	local function filter_relative_paths(path)
58c0de7c6da0 prosody, prosodyctl: Filter out relative paths from package.(c)path when installed
Matthew Wild <mwild1@gmail.com>
parents: 3998
diff changeset
    29
		if is_relative(path) then return ""; end
58c0de7c6da0 prosody, prosodyctl: Filter out relative paths from package.(c)path when installed
Matthew Wild <mwild1@gmail.com>
parents: 3998
diff changeset
    30
	end
58c0de7c6da0 prosody, prosodyctl: Filter out relative paths from package.(c)path when installed
Matthew Wild <mwild1@gmail.com>
parents: 3998
diff changeset
    31
	local function sanitise_paths(paths)
58c0de7c6da0 prosody, prosodyctl: Filter out relative paths from package.(c)path when installed
Matthew Wild <mwild1@gmail.com>
parents: 3998
diff changeset
    32
		return (paths:gsub("[^;]+;?", filter_relative_paths):gsub(";;+", ";"));
58c0de7c6da0 prosody, prosodyctl: Filter out relative paths from package.(c)path when installed
Matthew Wild <mwild1@gmail.com>
parents: 3998
diff changeset
    33
	end
58c0de7c6da0 prosody, prosodyctl: Filter out relative paths from package.(c)path when installed
Matthew Wild <mwild1@gmail.com>
parents: 3998
diff changeset
    34
	package.path = sanitise_paths(CFG_SOURCEDIR.."/?.lua;"..package.path);
58c0de7c6da0 prosody, prosodyctl: Filter out relative paths from package.(c)path when installed
Matthew Wild <mwild1@gmail.com>
parents: 3998
diff changeset
    35
	package.cpath = sanitise_paths(CFG_SOURCEDIR.."/?.so;"..package.cpath);
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    36
end
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    37
3742
a18acd47904b prosodyctl: Added and updated some comments and some semicolons, to match main prosody executable.
Waqas Hussain <waqas20@gmail.com>
parents: 3741
diff changeset
    38
-- Substitute ~ with path to home directory in data path
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    39
if CFG_DATADIR then
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    40
	if os.getenv("HOME") then
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    41
		CFG_DATADIR = CFG_DATADIR:gsub("^~", os.getenv("HOME"));
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    42
	end
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    43
end
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    44
8638
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents: 8564
diff changeset
    45
-----------
1580
5be6dc582df3 prosodyctl: Also switch group when we switch user
Matthew Wild <mwild1@gmail.com>
parents: 1523
diff changeset
    46
12582
10bb58ad5583 executables: Reject Lua 5.1 early
Kim Alvefur <zash@zash.se>
parents: 12456
diff changeset
    47
-- Check before first require, to preempt the probable failure
10bb58ad5583 executables: Reject Lua 5.1 early
Kim Alvefur <zash@zash.se>
parents: 12456
diff changeset
    48
if _VERSION < "Lua 5.2" then
10bb58ad5583 executables: Reject Lua 5.1 early
Kim Alvefur <zash@zash.se>
parents: 12456
diff changeset
    49
	io.stderr:write("Prosody is no longer compatible with Lua 5.1\n")
10bb58ad5583 executables: Reject Lua 5.1 early
Kim Alvefur <zash@zash.se>
parents: 12456
diff changeset
    50
	io.stderr:write("See https://prosody.im/doc/depends#lua for more information\n")
10bb58ad5583 executables: Reject Lua 5.1 early
Kim Alvefur <zash@zash.se>
parents: 12456
diff changeset
    51
	return os.exit(1);
10bb58ad5583 executables: Reject Lua 5.1 early
Kim Alvefur <zash@zash.se>
parents: 12456
diff changeset
    52
end
10bb58ad5583 executables: Reject Lua 5.1 early
Kim Alvefur <zash@zash.se>
parents: 12456
diff changeset
    53
12958
4f2accd99373 executables: Invoke loader to allow mixing of old and new import style
Kim Alvefur <zash@zash.se>
parents: 12868
diff changeset
    54
if not pcall(require, "prosody.loader") then
4f2accd99373 executables: Invoke loader to allow mixing of old and new import style
Kim Alvefur <zash@zash.se>
parents: 12868
diff changeset
    55
	pcall(require, "loader");
4f2accd99373 executables: Invoke loader to allow mixing of old and new import style
Kim Alvefur <zash@zash.se>
parents: 12868
diff changeset
    56
end
4f2accd99373 executables: Invoke loader to allow mixing of old and new import style
Kim Alvefur <zash@zash.se>
parents: 12868
diff changeset
    57
12975
7214baed9e9d executables: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12958
diff changeset
    58
local startup = require "prosody.util.startup";
8674
a4899174a894 prosodyctl: Large number of changes to satisfy [luacheck], includes bug fixes
Matthew Wild <mwild1@gmail.com>
parents: 8671
diff changeset
    59
startup.prosodyctl();
7925
2fd20f372cb1 prosodyctl: Trim trailing whitespace
Kim Alvefur <zash@zash.se>
parents: 7923
diff changeset
    60
8638
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents: 8564
diff changeset
    61
-----------
3339
7893055e54d1 prosodyctl: Warn and exit if any log files are not writeable, fixes #94
Matthew Wild <mwild1@gmail.com>
parents: 3338
diff changeset
    62
12975
7214baed9e9d executables: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12958
diff changeset
    63
local configmanager = require "prosody.core.configmanager";
7214baed9e9d executables: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12958
diff changeset
    64
local modulemanager = require "prosody.core.modulemanager"
7214baed9e9d executables: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12958
diff changeset
    65
local prosodyctl = require "prosody.util.prosodyctl"
6787
4da860edc27c prosodyctl: Import LuaSocket to a local, don't assume that a global will be set
Kim Alvefur <zash@zash.se>
parents: 6754
diff changeset
    66
local socket = require "socket"
12975
7214baed9e9d executables: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12958
diff changeset
    67
local dependencies = require "prosody.util.dependencies";
10614
b9a054ad38e7 prosodyctl: Fix some luacheck warnings
Matthew Wild <mwild1@gmail.com>
parents: 10612
diff changeset
    68
local lfs = dependencies.softreq "lfs";
8201
db82ce3decee prosody, prosodyctl: Set up TLS settings for HTTPS requests in net.http (part of fix for #659)
Kim Alvefur <zash@zash.se>
parents: 8193
diff changeset
    69
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    70
-----------------------
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    71
12975
7214baed9e9d executables: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12958
diff changeset
    72
local parse_args = require "prosody.util.argparse".parse;
7214baed9e9d executables: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12958
diff changeset
    73
local human_io = require "prosody.util.human.io";
10875
e5dee71d0ebb prosodyctl+util.prosodyctl.*: Start breaking up the ever-growing prosodyctl
Matthew Wild <mwild1@gmail.com>
parents: 10862
diff changeset
    74
4142
caa78589598f prosodyctl, util.prosodyctl: Move UI functions to util.prosodyctl so they can be used outside of prosodyctl itself
Matthew Wild <mwild1@gmail.com>
parents: 4095
diff changeset
    75
local show_message, show_warning = prosodyctl.show_message, prosodyctl.show_warning;
caa78589598f prosodyctl, util.prosodyctl: Move UI functions to util.prosodyctl so they can be used outside of prosodyctl itself
Matthew Wild <mwild1@gmail.com>
parents: 4095
diff changeset
    76
local show_usage = prosodyctl.show_usage;
10875
e5dee71d0ebb prosodyctl+util.prosodyctl.*: Start breaking up the ever-growing prosodyctl
Matthew Wild <mwild1@gmail.com>
parents: 10862
diff changeset
    77
local read_password = human_io.read_password;
10211
4c755c2e6305 prosodyctl: Install, remove and list commands now use the call_luarocks function
João Duarte <jvsDuarte08@gmail.com>
parents: 10206
diff changeset
    78
local call_luarocks = prosodyctl.call_luarocks;
10875
e5dee71d0ebb prosodyctl+util.prosodyctl.*: Start breaking up the ever-growing prosodyctl
Matthew Wild <mwild1@gmail.com>
parents: 10862
diff changeset
    79
local error_messages = prosodyctl.error_messages;
1459
545208bc0e84 prosodyctl: Use prosodyctl_timeout option if it exists in the config
Matthew Wild <mwild1@gmail.com>
parents: 1458
diff changeset
    80
12975
7214baed9e9d executables: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12958
diff changeset
    81
local jid_split = require "prosody.util.jid".prepped_split;
6324
c9730926002b prosodyctl: Improve JID splitting and normalization for adduser/passwd/deluser
Matthew Wild <mwild1@gmail.com>
parents: 6035
diff changeset
    82
8674
a4899174a894 prosodyctl: Large number of changes to satisfy [luacheck], includes bug fixes
Matthew Wild <mwild1@gmail.com>
parents: 8671
diff changeset
    83
local prosodyctl_timeout = (configmanager.get("*", "prosodyctl_timeout") or 5) * 2;
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    84
-----------------------
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    85
local commands = {};
9784
c7727c13260f prosodyctl: Pass the original argv table to subcommands (with first argument removed)
Kim Alvefur <zash@zash.se>
parents: 9713
diff changeset
    86
local command = table.remove(arg, 1);
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    87
12268
ba712f7559dc prosodyctl: Use argument parsing library to parse --help, -h, -?
Kim Alvefur <zash@zash.se>
parents: 12107
diff changeset
    88
local only_help = { short_params = { h = "help"; ["?"] = "help" } }
ba712f7559dc prosodyctl: Use argument parsing library to parse --help, -h, -?
Kim Alvefur <zash@zash.se>
parents: 12107
diff changeset
    89
10145
cf70deac27f6 prosodyctl: Added the 'install' command
João Duarte <jvsDuarte08@gmail.com>
parents: 10144
diff changeset
    90
function commands.install(arg)
12268
ba712f7559dc prosodyctl: Use argument parsing library to parse --help, -h, -?
Kim Alvefur <zash@zash.se>
parents: 12107
diff changeset
    91
	local opts = parse_args(arg, only_help);
ba712f7559dc prosodyctl: Use argument parsing library to parse --help, -h, -?
Kim Alvefur <zash@zash.se>
parents: 12107
diff changeset
    92
	if opts.help or not arg[1] then
10176
5da519ef2d51 prosodyctl: Corrected the help output of the install and remove commands
João Duarte <jvsDuarte08@gmail.com>
parents: 10174
diff changeset
    93
		show_usage([[install]], [[Installs a prosody/luarocks plugin]]);
12269
47d5233a1fc7 prosodyctl: Return success status code from --help
Kim Alvefur <zash@zash.se>
parents: 12268
diff changeset
    94
		return opts.help and 0 or 1;
10151
1a35b3a2b11b prosodyctl: Corrected indentation on my code
João Duarte <jvsDuarte08@gmail.com>
parents: 10150
diff changeset
    95
	end
11139
56490ffde93f util.prosodyctl: Get Luarocks server from config
Kim Alvefur <zash@zash.se>
parents: 11138
diff changeset
    96
	-- TODO finalize config option name
12271
a52a0680fcd8 prosodyctl: Allow passing server on command line with --server
Kim Alvefur <zash@zash.se>
parents: 12270
diff changeset
    97
	local server = opts.server or configmanager.get("*", "plugin_server");
12270
24b0c4c4e28a prosodyctl: Allow install plugin via explicit path or URL
Kim Alvefur <zash@zash.se>
parents: 12269
diff changeset
    98
	if not (arg[1]:match("^https://") or lfs.attributes(arg[1]) or server) then
11299
50ea7d9143ad prosodyctl: Abort if no plugin source specified for the installer
Kim Alvefur <zash@zash.se>
parents: 11298
diff changeset
    99
		show_warning("There is no 'plugin_server' option in the configuration file");
50ea7d9143ad prosodyctl: Abort if no plugin source specified for the installer
Kim Alvefur <zash@zash.se>
parents: 11298
diff changeset
   100
		-- see https://prosody.im/doc/TODO documentation
11305
d7f0dc727a47 prosodyctl: Add reference to #1602 (plugin installer docs) in comment
Kim Alvefur <zash@zash.se>
parents: 11304
diff changeset
   101
		-- #1602
11299
50ea7d9143ad prosodyctl: Abort if no plugin source specified for the installer
Kim Alvefur <zash@zash.se>
parents: 11298
diff changeset
   102
		return 1;
50ea7d9143ad prosodyctl: Abort if no plugin source specified for the installer
Kim Alvefur <zash@zash.se>
parents: 11298
diff changeset
   103
	end
11304
d0d64655e584 prosodyctl: Move message after condition
Kim Alvefur <zash@zash.se>
parents: 11301
diff changeset
   104
	show_message("Installing %s in %s", arg[1], prosody.paths.installer);
11299
50ea7d9143ad prosodyctl: Abort if no plugin source specified for the installer
Kim Alvefur <zash@zash.se>
parents: 11298
diff changeset
   105
	local ret = call_luarocks("install", arg[1], server);
12270
24b0c4c4e28a prosodyctl: Allow install plugin via explicit path or URL
Kim Alvefur <zash@zash.se>
parents: 12269
diff changeset
   106
	if ret == 0 and arg[1]:match("^mod_") then
11301
2e9d4c517919 prosodyctl: Fix copypaste oversight
Kim Alvefur <zash@zash.se>
parents: 11299
diff changeset
   107
		prosodyctl.show_module_configuration_help(arg[1]);
11298
a1939b261f67 prosodyctl: Move UI related calls out of util.prosodyctl
Kim Alvefur <zash@zash.se>
parents: 11297
diff changeset
   108
	end
11297
cd27ac5e5afe prosodyctl: Use luarocks status code as exit code
Kim Alvefur <zash@zash.se>
parents: 11251
diff changeset
   109
	return ret;
10145
cf70deac27f6 prosodyctl: Added the 'install' command
João Duarte <jvsDuarte08@gmail.com>
parents: 10144
diff changeset
   110
end
cf70deac27f6 prosodyctl: Added the 'install' command
João Duarte <jvsDuarte08@gmail.com>
parents: 10144
diff changeset
   111
10165
ea10561e5566 prosodyctl: Corrected the remove and install commands' order
João Duarte <jvsDuarte08@gmail.com>
parents: 10164
diff changeset
   112
function commands.remove(arg)
12268
ba712f7559dc prosodyctl: Use argument parsing library to parse --help, -h, -?
Kim Alvefur <zash@zash.se>
parents: 12107
diff changeset
   113
	local opts = parse_args(arg, only_help);
ba712f7559dc prosodyctl: Use argument parsing library to parse --help, -h, -?
Kim Alvefur <zash@zash.se>
parents: 12107
diff changeset
   114
	if opts.help or not arg[1] then
10206
d3764eed7ded prosodyctl: Fixed a typo
João Duarte <jvsDuarte08@gmail.com>
parents: 10194
diff changeset
   115
		show_usage([[remove]], [[Removes a module installed in the working directory's plugins folder]]);
12269
47d5233a1fc7 prosodyctl: Return success status code from --help
Kim Alvefur <zash@zash.se>
parents: 12268
diff changeset
   116
		return opts.help and 0 or 1;
10165
ea10561e5566 prosodyctl: Corrected the remove and install commands' order
João Duarte <jvsDuarte08@gmail.com>
parents: 10164
diff changeset
   117
	end
11298
a1939b261f67 prosodyctl: Move UI related calls out of util.prosodyctl
Kim Alvefur <zash@zash.se>
parents: 11297
diff changeset
   118
	show_message("Removing %s from %s", arg[1], prosody.paths.installer);
11297
cd27ac5e5afe prosodyctl: Use luarocks status code as exit code
Kim Alvefur <zash@zash.se>
parents: 11251
diff changeset
   119
	local ret = call_luarocks("remove", arg[1]);
cd27ac5e5afe prosodyctl: Use luarocks status code as exit code
Kim Alvefur <zash@zash.se>
parents: 11251
diff changeset
   120
	return ret;
10165
ea10561e5566 prosodyctl: Corrected the remove and install commands' order
João Duarte <jvsDuarte08@gmail.com>
parents: 10164
diff changeset
   121
end
ea10561e5566 prosodyctl: Corrected the remove and install commands' order
João Duarte <jvsDuarte08@gmail.com>
parents: 10164
diff changeset
   122
10130
ad640c2e072e prosodyctl: Implemented the 'list' command, which is a bridge to 'luarocks list'
João Duarte <jvsDuarte08@gmail.com>
parents: 10129
diff changeset
   123
function commands.list(arg)
12268
ba712f7559dc prosodyctl: Use argument parsing library to parse --help, -h, -?
Kim Alvefur <zash@zash.se>
parents: 12107
diff changeset
   124
	local opts = parse_args(arg, only_help);
ba712f7559dc prosodyctl: Use argument parsing library to parse --help, -h, -?
Kim Alvefur <zash@zash.se>
parents: 12107
diff changeset
   125
	if opts.help then
10139
3ae2809030dd prosodyctl: added help support to all my functions
João Duarte <jvsDuarte08@gmail.com>
parents: 10138
diff changeset
   126
		show_usage([[list]], [[Shows installed rocks]]);
12269
47d5233a1fc7 prosodyctl: Return success status code from --help
Kim Alvefur <zash@zash.se>
parents: 12268
diff changeset
   127
		return 0;
10139
3ae2809030dd prosodyctl: added help support to all my functions
João Duarte <jvsDuarte08@gmail.com>
parents: 10138
diff changeset
   128
	end
12456
c475a7802169 prosodyctl: Pass server when listing (outdated) plugins (fix #1738)
Kim Alvefur <zash@zash.se>
parents: 12439
diff changeset
   129
	local server = opts.server or configmanager.get("*", "plugin_server");
12296
7fe5cd8a10e2 prosodyctl: Restore 'list --outdated'
Kim Alvefur <zash@zash.se>
parents: 12271
diff changeset
   130
	if opts.outdated then
7fe5cd8a10e2 prosodyctl: Restore 'list --outdated'
Kim Alvefur <zash@zash.se>
parents: 12271
diff changeset
   131
		-- put this back for luarocks
7fe5cd8a10e2 prosodyctl: Restore 'list --outdated'
Kim Alvefur <zash@zash.se>
parents: 12271
diff changeset
   132
		arg[1] = "--outdated";
12456
c475a7802169 prosodyctl: Pass server when listing (outdated) plugins (fix #1738)
Kim Alvefur <zash@zash.se>
parents: 12439
diff changeset
   133
c475a7802169 prosodyctl: Pass server when listing (outdated) plugins (fix #1738)
Kim Alvefur <zash@zash.se>
parents: 12439
diff changeset
   134
		if not server then
c475a7802169 prosodyctl: Pass server when listing (outdated) plugins (fix #1738)
Kim Alvefur <zash@zash.se>
parents: 12439
diff changeset
   135
			show_warning("There is no 'plugin_server' option in the configuration file, but this is needed for 'list --outdated' to work.");
c475a7802169 prosodyctl: Pass server when listing (outdated) plugins (fix #1738)
Kim Alvefur <zash@zash.se>
parents: 12439
diff changeset
   136
			return 1;
c475a7802169 prosodyctl: Pass server when listing (outdated) plugins (fix #1738)
Kim Alvefur <zash@zash.se>
parents: 12439
diff changeset
   137
		end
12296
7fe5cd8a10e2 prosodyctl: Restore 'list --outdated'
Kim Alvefur <zash@zash.se>
parents: 12271
diff changeset
   138
	end
12456
c475a7802169 prosodyctl: Pass server when listing (outdated) plugins (fix #1738)
Kim Alvefur <zash@zash.se>
parents: 12439
diff changeset
   139
	local ret = call_luarocks("list", arg[1], server);
11297
cd27ac5e5afe prosodyctl: Use luarocks status code as exit code
Kim Alvefur <zash@zash.se>
parents: 11251
diff changeset
   140
	return ret;
10130
ad640c2e072e prosodyctl: Implemented the 'list' command, which is a bridge to 'luarocks list'
João Duarte <jvsDuarte08@gmail.com>
parents: 10129
diff changeset
   141
end
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   142
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   143
function commands.adduser(arg)
12268
ba712f7559dc prosodyctl: Use argument parsing library to parse --help, -h, -?
Kim Alvefur <zash@zash.se>
parents: 12107
diff changeset
   144
	local opts = parse_args(arg, only_help);
ba712f7559dc prosodyctl: Use argument parsing library to parse --help, -h, -?
Kim Alvefur <zash@zash.se>
parents: 12107
diff changeset
   145
	if opts.help or not arg[1] then
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   146
		show_usage([[adduser JID]], [[Create the specified user account in Prosody]]);
12269
47d5233a1fc7 prosodyctl: Return success status code from --help
Kim Alvefur <zash@zash.se>
parents: 12268
diff changeset
   147
		return opts.help and 0 or 1;
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   148
	end
6324
c9730926002b prosodyctl: Improve JID splitting and normalization for adduser/passwd/deluser
Matthew Wild <mwild1@gmail.com>
parents: 6035
diff changeset
   149
	local user, host = jid_split(arg[1]);
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   150
	if not user and host then
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   151
		show_message [[Failed to understand JID, please supply the JID you want to create]]
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   152
		show_usage [[adduser user@host]]
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   153
		return 1;
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   154
	end
7925
2fd20f372cb1 prosodyctl: Trim trailing whitespace
Kim Alvefur <zash@zash.se>
parents: 7923
diff changeset
   155
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   156
	if not host then
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   157
		show_message [[Please specify a JID, including a host. e.g. alice@example.com]];
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   158
		return 1;
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   159
	end
7925
2fd20f372cb1 prosodyctl: Trim trailing whitespace
Kim Alvefur <zash@zash.se>
parents: 7923
diff changeset
   160
8721
c23cdeac5b61 prosodyctl: Use prosody.hosts instead of _G.hosts
Kim Alvefur <zash@zash.se>
parents: 8704
diff changeset
   161
	if not prosody.hosts[host] then
3038
6b68355d615a prosodyctl: Support for the new usermanager, refactor host creation and fail if a host is not using the default authentication provider, for now. (thanks Nicola)
Matthew Wild <mwild1@gmail.com>
parents: 3015
diff changeset
   162
		show_warning("The host '%s' is not listed in the configuration file (or is not enabled).", host)
6b68355d615a prosodyctl: Support for the new usermanager, refactor host creation and fail if a host is not using the default authentication provider, for now. (thanks Nicola)
Matthew Wild <mwild1@gmail.com>
parents: 3015
diff changeset
   163
		show_warning("The user will not be able to log in until this is changed.");
8721
c23cdeac5b61 prosodyctl: Use prosody.hosts instead of _G.hosts
Kim Alvefur <zash@zash.se>
parents: 8704
diff changeset
   164
		prosody.hosts[host] = startup.make_host(host); --luacheck: ignore 122
3038
6b68355d615a prosodyctl: Support for the new usermanager, refactor host creation and fail if a host is not using the default authentication provider, for now. (thanks Nicola)
Matthew Wild <mwild1@gmail.com>
parents: 3015
diff changeset
   165
	end
7925
2fd20f372cb1 prosodyctl: Trim trailing whitespace
Kim Alvefur <zash@zash.se>
parents: 7923
diff changeset
   166
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   167
	if prosodyctl.user_exists{ user = user, host = host } then
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   168
		show_message [[That user already exists]];
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   169
		return 1;
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   170
	end
7925
2fd20f372cb1 prosodyctl: Trim trailing whitespace
Kim Alvefur <zash@zash.se>
parents: 7923
diff changeset
   171
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   172
	local password = read_password();
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   173
	if not password then return 1; end
7925
2fd20f372cb1 prosodyctl: Trim trailing whitespace
Kim Alvefur <zash@zash.se>
parents: 7923
diff changeset
   174
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   175
	local ok, msg = prosodyctl.adduser { user = user, host = host, password = password };
7925
2fd20f372cb1 prosodyctl: Trim trailing whitespace
Kim Alvefur <zash@zash.se>
parents: 7923
diff changeset
   176
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   177
	if ok then return 0; end
7925
2fd20f372cb1 prosodyctl: Trim trailing whitespace
Kim Alvefur <zash@zash.se>
parents: 7923
diff changeset
   178
10373
9d20fca6a485 prosodyctl: Print friendly version of error messages
Kim Alvefur <zash@zash.se>
parents: 10274
diff changeset
   179
	show_message(error_messages[msg])
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   180
	return 1;
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   181
end
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   182
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   183
function commands.passwd(arg)
12268
ba712f7559dc prosodyctl: Use argument parsing library to parse --help, -h, -?
Kim Alvefur <zash@zash.se>
parents: 12107
diff changeset
   184
	local opts = parse_args(arg, only_help);
ba712f7559dc prosodyctl: Use argument parsing library to parse --help, -h, -?
Kim Alvefur <zash@zash.se>
parents: 12107
diff changeset
   185
	if opts.help or not arg[1] then
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   186
		show_usage([[passwd JID]], [[Set the password for the specified user account in Prosody]]);
12269
47d5233a1fc7 prosodyctl: Return success status code from --help
Kim Alvefur <zash@zash.se>
parents: 12268
diff changeset
   187
		return opts.help and 0 or 1;
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   188
	end
5610
f73d5fb4ea13 prosodyctl: Use jid.split() to parse parameter to adduser/deluser/passwd
Matthew Wild <mwild1@gmail.com>
parents: 5592
diff changeset
   189
	local user, host = jid_split(arg[1]);
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   190
	if not user and host then
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   191
		show_message [[Failed to understand JID, please supply the JID you want to set the password for]]
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   192
		show_usage [[passwd user@host]]
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   193
		return 1;
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   194
	end
7925
2fd20f372cb1 prosodyctl: Trim trailing whitespace
Kim Alvefur <zash@zash.se>
parents: 7923
diff changeset
   195
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   196
	if not host then
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   197
		show_message [[Please specify a JID, including a host. e.g. alice@example.com]];
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   198
		return 1;
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   199
	end
7925
2fd20f372cb1 prosodyctl: Trim trailing whitespace
Kim Alvefur <zash@zash.se>
parents: 7923
diff changeset
   200
8721
c23cdeac5b61 prosodyctl: Use prosody.hosts instead of _G.hosts
Kim Alvefur <zash@zash.se>
parents: 8704
diff changeset
   201
	if not prosody.hosts[host] then
3038
6b68355d615a prosodyctl: Support for the new usermanager, refactor host creation and fail if a host is not using the default authentication provider, for now. (thanks Nicola)
Matthew Wild <mwild1@gmail.com>
parents: 3015
diff changeset
   202
		show_warning("The host '%s' is not listed in the configuration file (or is not enabled).", host)
6b68355d615a prosodyctl: Support for the new usermanager, refactor host creation and fail if a host is not using the default authentication provider, for now. (thanks Nicola)
Matthew Wild <mwild1@gmail.com>
parents: 3015
diff changeset
   203
		show_warning("The user will not be able to log in until this is changed.");
8721
c23cdeac5b61 prosodyctl: Use prosody.hosts instead of _G.hosts
Kim Alvefur <zash@zash.se>
parents: 8704
diff changeset
   204
		prosody.hosts[host] = startup.make_host(host); --luacheck: ignore 122
3038
6b68355d615a prosodyctl: Support for the new usermanager, refactor host creation and fail if a host is not using the default authentication provider, for now. (thanks Nicola)
Matthew Wild <mwild1@gmail.com>
parents: 3015
diff changeset
   205
	end
7925
2fd20f372cb1 prosodyctl: Trim trailing whitespace
Kim Alvefur <zash@zash.se>
parents: 7923
diff changeset
   206
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   207
	if not prosodyctl.user_exists { user = user, host = host } then
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   208
		show_message [[That user does not exist, use prosodyctl adduser to create a new user]]
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   209
		return 1;
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   210
	end
7925
2fd20f372cb1 prosodyctl: Trim trailing whitespace
Kim Alvefur <zash@zash.se>
parents: 7923
diff changeset
   211
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   212
	local password = read_password();
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   213
	if not password then return 1; end
7925
2fd20f372cb1 prosodyctl: Trim trailing whitespace
Kim Alvefur <zash@zash.se>
parents: 7923
diff changeset
   214
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   215
	local ok, msg = prosodyctl.passwd { user = user, host = host, password = password };
7925
2fd20f372cb1 prosodyctl: Trim trailing whitespace
Kim Alvefur <zash@zash.se>
parents: 7923
diff changeset
   216
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   217
	if ok then return 0; end
7925
2fd20f372cb1 prosodyctl: Trim trailing whitespace
Kim Alvefur <zash@zash.se>
parents: 7923
diff changeset
   218
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   219
	show_message(error_messages[msg])
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   220
	return 1;
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   221
end
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   222
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   223
function commands.deluser(arg)
12268
ba712f7559dc prosodyctl: Use argument parsing library to parse --help, -h, -?
Kim Alvefur <zash@zash.se>
parents: 12107
diff changeset
   224
	local opts = parse_args(arg, only_help);
ba712f7559dc prosodyctl: Use argument parsing library to parse --help, -h, -?
Kim Alvefur <zash@zash.se>
parents: 12107
diff changeset
   225
	if opts.help or not arg[1] then
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   226
		show_usage([[deluser JID]], [[Permanently remove the specified user account from Prosody]]);
12269
47d5233a1fc7 prosodyctl: Return success status code from --help
Kim Alvefur <zash@zash.se>
parents: 12268
diff changeset
   227
		return opts.help and 0 or 1;
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   228
	end
6324
c9730926002b prosodyctl: Improve JID splitting and normalization for adduser/passwd/deluser
Matthew Wild <mwild1@gmail.com>
parents: 6035
diff changeset
   229
	local user, host = jid_split(arg[1]);
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   230
	if not user and host then
7679
7311dc843718 prosodyctl: Fix copy/paste error in help text for deluser command
Matthew Wild <mwild1@gmail.com>
parents: 6501
diff changeset
   231
		show_message [[Failed to understand JID, please supply the JID to the user account you want to delete]]
7311dc843718 prosodyctl: Fix copy/paste error in help text for deluser command
Matthew Wild <mwild1@gmail.com>
parents: 6501
diff changeset
   232
		show_usage [[deluser user@host]]
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   233
		return 1;
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   234
	end
7925
2fd20f372cb1 prosodyctl: Trim trailing whitespace
Kim Alvefur <zash@zash.se>
parents: 7923
diff changeset
   235
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   236
	if not host then
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   237
		show_message [[Please specify a JID, including a host. e.g. alice@example.com]];
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   238
		return 1;
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   239
	end
7925
2fd20f372cb1 prosodyctl: Trim trailing whitespace
Kim Alvefur <zash@zash.se>
parents: 7923
diff changeset
   240
8721
c23cdeac5b61 prosodyctl: Use prosody.hosts instead of _G.hosts
Kim Alvefur <zash@zash.se>
parents: 8704
diff changeset
   241
	if not prosody.hosts[host] then
3038
6b68355d615a prosodyctl: Support for the new usermanager, refactor host creation and fail if a host is not using the default authentication provider, for now. (thanks Nicola)
Matthew Wild <mwild1@gmail.com>
parents: 3015
diff changeset
   242
		show_warning("The host '%s' is not listed in the configuration file (or is not enabled).", host)
8721
c23cdeac5b61 prosodyctl: Use prosody.hosts instead of _G.hosts
Kim Alvefur <zash@zash.se>
parents: 8704
diff changeset
   243
		prosody.hosts[host] = startup.make_host(host); --luacheck: ignore 122
3038
6b68355d615a prosodyctl: Support for the new usermanager, refactor host creation and fail if a host is not using the default authentication provider, for now. (thanks Nicola)
Matthew Wild <mwild1@gmail.com>
parents: 3015
diff changeset
   244
	end
6b68355d615a prosodyctl: Support for the new usermanager, refactor host creation and fail if a host is not using the default authentication provider, for now. (thanks Nicola)
Matthew Wild <mwild1@gmail.com>
parents: 3015
diff changeset
   245
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   246
	if not prosodyctl.user_exists { user = user, host = host } then
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   247
		show_message [[That user does not exist on this server]]
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   248
		return 1;
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   249
	end
7925
2fd20f372cb1 prosodyctl: Trim trailing whitespace
Kim Alvefur <zash@zash.se>
parents: 7923
diff changeset
   250
5101
a94c43cad081 prosodyctl: Use util.prosodyctl.deluser
Kim Alvefur <zash@zash.se>
parents: 5024
diff changeset
   251
	local ok, msg = prosodyctl.deluser { user = user, host = host };
7925
2fd20f372cb1 prosodyctl: Trim trailing whitespace
Kim Alvefur <zash@zash.se>
parents: 7923
diff changeset
   252
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   253
	if ok then return 0; end
7925
2fd20f372cb1 prosodyctl: Trim trailing whitespace
Kim Alvefur <zash@zash.se>
parents: 7923
diff changeset
   254
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   255
	show_message(error_messages[msg])
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   256
	return 1;
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   257
end
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   258
12107
fc297128c33a prosodyctl: Hide process management commands when init system should be used instead
Kim Alvefur <zash@zash.se>
parents: 12106
diff changeset
   259
local function has_init_system() --> which
fc297128c33a prosodyctl: Hide process management commands when init system should be used instead
Kim Alvefur <zash@zash.se>
parents: 12106
diff changeset
   260
	lfs = lfs or require"lfs";
fc297128c33a prosodyctl: Hide process management commands when init system should be used instead
Kim Alvefur <zash@zash.se>
parents: 12106
diff changeset
   261
	if lfs.attributes("/etc/systemd") then
fc297128c33a prosodyctl: Hide process management commands when init system should be used instead
Kim Alvefur <zash@zash.se>
parents: 12106
diff changeset
   262
		return "systemd";
fc297128c33a prosodyctl: Hide process management commands when init system should be used instead
Kim Alvefur <zash@zash.se>
parents: 12106
diff changeset
   263
	elseif lfs.attributes("/etc/init.d/prosody") then
fc297128c33a prosodyctl: Hide process management commands when init system should be used instead
Kim Alvefur <zash@zash.se>
parents: 12106
diff changeset
   264
		return "rc.d";
fc297128c33a prosodyctl: Hide process management commands when init system should be used instead
Kim Alvefur <zash@zash.se>
parents: 12106
diff changeset
   265
	end
fc297128c33a prosodyctl: Hide process management commands when init system should be used instead
Kim Alvefur <zash@zash.se>
parents: 12106
diff changeset
   266
end
fc297128c33a prosodyctl: Hide process management commands when init system should be used instead
Kim Alvefur <zash@zash.se>
parents: 12106
diff changeset
   267
10614
b9a054ad38e7 prosodyctl: Fix some luacheck warnings
Matthew Wild <mwild1@gmail.com>
parents: 10612
diff changeset
   268
local function service_command_warning(service_command)
10612
87003b937672 Log warning when using prosodyctl start/stop/restart
Matthew Wild <mwild1@gmail.com>
parents: 10582
diff changeset
   269
	if prosody.installed and configmanager.get("*", "prosodyctl_service_warnings") ~= false then
87003b937672 Log warning when using prosodyctl start/stop/restart
Matthew Wild <mwild1@gmail.com>
parents: 10582
diff changeset
   270
		show_warning("WARNING: Use of prosodyctl start/stop/restart/reload is not recommended");
87003b937672 Log warning when using prosodyctl start/stop/restart
Matthew Wild <mwild1@gmail.com>
parents: 10582
diff changeset
   271
		show_warning("         if Prosody is managed by an init system - use that directly instead.");
12107
fc297128c33a prosodyctl: Hide process management commands when init system should be used instead
Kim Alvefur <zash@zash.se>
parents: 12106
diff changeset
   272
		local init = has_init_system()
fc297128c33a prosodyctl: Hide process management commands when init system should be used instead
Kim Alvefur <zash@zash.se>
parents: 12106
diff changeset
   273
		if init == "systemd" then
10614
b9a054ad38e7 prosodyctl: Fix some luacheck warnings
Matthew Wild <mwild1@gmail.com>
parents: 10612
diff changeset
   274
			show_warning("         e.g. systemctl %s prosody", service_command);
12107
fc297128c33a prosodyctl: Hide process management commands when init system should be used instead
Kim Alvefur <zash@zash.se>
parents: 12106
diff changeset
   275
		elseif init == "rc.d" then
10614
b9a054ad38e7 prosodyctl: Fix some luacheck warnings
Matthew Wild <mwild1@gmail.com>
parents: 10612
diff changeset
   276
			show_warning("         e.g. /etc/init.d/prosody %s", service_command);
10612
87003b937672 Log warning when using prosodyctl start/stop/restart
Matthew Wild <mwild1@gmail.com>
parents: 10582
diff changeset
   277
		end
87003b937672 Log warning when using prosodyctl start/stop/restart
Matthew Wild <mwild1@gmail.com>
parents: 10582
diff changeset
   278
		show_warning("");
87003b937672 Log warning when using prosodyctl start/stop/restart
Matthew Wild <mwild1@gmail.com>
parents: 10582
diff changeset
   279
	end
87003b937672 Log warning when using prosodyctl start/stop/restart
Matthew Wild <mwild1@gmail.com>
parents: 10582
diff changeset
   280
end
87003b937672 Log warning when using prosodyctl start/stop/restart
Matthew Wild <mwild1@gmail.com>
parents: 10582
diff changeset
   281
1089
a817cbaa0f46 prosodyctl: Multiple fixes for start/status/stop
Matthew Wild <mwild1@gmail.com>
parents: 1087
diff changeset
   282
function commands.start(arg)
12268
ba712f7559dc prosodyctl: Use argument parsing library to parse --help, -h, -?
Kim Alvefur <zash@zash.se>
parents: 12107
diff changeset
   283
	local opts = parse_args(arg, only_help);
ba712f7559dc prosodyctl: Use argument parsing library to parse --help, -h, -?
Kim Alvefur <zash@zash.se>
parents: 12107
diff changeset
   284
	if opts.help then
1089
a817cbaa0f46 prosodyctl: Multiple fixes for start/status/stop
Matthew Wild <mwild1@gmail.com>
parents: 1087
diff changeset
   285
		show_usage([[start]], [[Start Prosody]]);
12269
47d5233a1fc7 prosodyctl: Return success status code from --help
Kim Alvefur <zash@zash.se>
parents: 12268
diff changeset
   286
		return 0;
1089
a817cbaa0f46 prosodyctl: Multiple fixes for start/status/stop
Matthew Wild <mwild1@gmail.com>
parents: 1087
diff changeset
   287
	end
10612
87003b937672 Log warning when using prosodyctl start/stop/restart
Matthew Wild <mwild1@gmail.com>
parents: 10582
diff changeset
   288
	service_command_warning("start");
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   289
	local ok, ret = prosodyctl.isrunning();
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   290
	if not ok then
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   291
		show_message(error_messages[ret]);
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   292
		return 1;
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   293
	end
7925
2fd20f372cb1 prosodyctl: Trim trailing whitespace
Kim Alvefur <zash@zash.se>
parents: 7923
diff changeset
   294
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   295
	if ret then
8674
a4899174a894 prosodyctl: Large number of changes to satisfy [luacheck], includes bug fixes
Matthew Wild <mwild1@gmail.com>
parents: 8671
diff changeset
   296
		--luacheck: ignore 421/ret
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   297
		local ok, ret = prosodyctl.getpid();
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   298
		if not ok then
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   299
			show_message("Couldn't get running Prosody's PID");
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   300
			show_message(error_messages[ret]);
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   301
			return 1;
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   302
		end
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   303
		show_message("Prosody is already running with PID %s", ret or "(unknown)");
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   304
		return 1;
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   305
	end
7925
2fd20f372cb1 prosodyctl: Trim trailing whitespace
Kim Alvefur <zash@zash.se>
parents: 7923
diff changeset
   306
8674
a4899174a894 prosodyctl: Large number of changes to satisfy [luacheck], includes bug fixes
Matthew Wild <mwild1@gmail.com>
parents: 8671
diff changeset
   307
	--luacheck: ignore 411/ret
10068
1acfd25cd507 prosodyctl: Fix extraction of interpreter from arg when additional arguments (fixes #1386)
Kim Alvefur <zash@zash.se>
parents: 9996
diff changeset
   308
	local lua;
1acfd25cd507 prosodyctl: Fix extraction of interpreter from arg when additional arguments (fixes #1386)
Kim Alvefur <zash@zash.se>
parents: 9996
diff changeset
   309
	do
1acfd25cd507 prosodyctl: Fix extraction of interpreter from arg when additional arguments (fixes #1386)
Kim Alvefur <zash@zash.se>
parents: 9996
diff changeset
   310
		local i = 0;
1acfd25cd507 prosodyctl: Fix extraction of interpreter from arg when additional arguments (fixes #1386)
Kim Alvefur <zash@zash.se>
parents: 9996
diff changeset
   311
		repeat
1acfd25cd507 prosodyctl: Fix extraction of interpreter from arg when additional arguments (fixes #1386)
Kim Alvefur <zash@zash.se>
parents: 9996
diff changeset
   312
			i = i - 1;
1acfd25cd507 prosodyctl: Fix extraction of interpreter from arg when additional arguments (fixes #1386)
Kim Alvefur <zash@zash.se>
parents: 9996
diff changeset
   313
		until arg[i-1] == nil
1acfd25cd507 prosodyctl: Fix extraction of interpreter from arg when additional arguments (fixes #1386)
Kim Alvefur <zash@zash.se>
parents: 9996
diff changeset
   314
		lua = arg[i];
1acfd25cd507 prosodyctl: Fix extraction of interpreter from arg when additional arguments (fixes #1386)
Kim Alvefur <zash@zash.se>
parents: 9996
diff changeset
   315
	end
1acfd25cd507 prosodyctl: Fix extraction of interpreter from arg when additional arguments (fixes #1386)
Kim Alvefur <zash@zash.se>
parents: 9996
diff changeset
   316
	local ok, ret = prosodyctl.start(prosody.paths.source, lua);
1458
fce75b4efda9 prosodyctl: Improve usability with status messages, and waiting up to 5s for the server to start/stop
Matthew Wild <mwild1@gmail.com>
parents: 1390
diff changeset
   317
	if ok then
8674
a4899174a894 prosodyctl: Large number of changes to satisfy [luacheck], includes bug fixes
Matthew Wild <mwild1@gmail.com>
parents: 8671
diff changeset
   318
		local daemonize = configmanager.get("*", "daemonize");
6062
6cc6b4d407df prosodyctl, util.prosodyctl: Update to reflect that mod_posix gets loaded by default on posix platforms
Kim Alvefur <zash@zash.se>
parents: 6038
diff changeset
   319
		if daemonize == nil then
6cc6b4d407df prosodyctl, util.prosodyctl: Update to reflect that mod_posix gets loaded by default on posix platforms
Kim Alvefur <zash@zash.se>
parents: 6038
diff changeset
   320
			daemonize = prosody.installed;
6cc6b4d407df prosodyctl, util.prosodyctl: Update to reflect that mod_posix gets loaded by default on posix platforms
Kim Alvefur <zash@zash.se>
parents: 6038
diff changeset
   321
		end
6cc6b4d407df prosodyctl, util.prosodyctl: Update to reflect that mod_posix gets loaded by default on posix platforms
Kim Alvefur <zash@zash.se>
parents: 6038
diff changeset
   322
		if daemonize then
2511
a81c710b1708 prosodyctl: Don't display message about failing to start Prosody is daemonizing is disabled (if daemonizing is disabled then Prosody is stopped by the time control returns to prosodyctl, which then can't see Prosody running)
Matthew Wild <mwild1@gmail.com>
parents: 2510
diff changeset
   323
			local i=1;
a81c710b1708 prosodyctl: Don't display message about failing to start Prosody is daemonizing is disabled (if daemonizing is disabled then Prosody is stopped by the time control returns to prosodyctl, which then can't see Prosody running)
Matthew Wild <mwild1@gmail.com>
parents: 2510
diff changeset
   324
			while true do
a81c710b1708 prosodyctl: Don't display message about failing to start Prosody is daemonizing is disabled (if daemonizing is disabled then Prosody is stopped by the time control returns to prosodyctl, which then can't see Prosody running)
Matthew Wild <mwild1@gmail.com>
parents: 2510
diff changeset
   325
				local ok, running = prosodyctl.isrunning();
a81c710b1708 prosodyctl: Don't display message about failing to start Prosody is daemonizing is disabled (if daemonizing is disabled then Prosody is stopped by the time control returns to prosodyctl, which then can't see Prosody running)
Matthew Wild <mwild1@gmail.com>
parents: 2510
diff changeset
   326
				if ok and running then
a81c710b1708 prosodyctl: Don't display message about failing to start Prosody is daemonizing is disabled (if daemonizing is disabled then Prosody is stopped by the time control returns to prosodyctl, which then can't see Prosody running)
Matthew Wild <mwild1@gmail.com>
parents: 2510
diff changeset
   327
					break;
a81c710b1708 prosodyctl: Don't display message about failing to start Prosody is daemonizing is disabled (if daemonizing is disabled then Prosody is stopped by the time control returns to prosodyctl, which then can't see Prosody running)
Matthew Wild <mwild1@gmail.com>
parents: 2510
diff changeset
   328
				elseif i == 5 then
a81c710b1708 prosodyctl: Don't display message about failing to start Prosody is daemonizing is disabled (if daemonizing is disabled then Prosody is stopped by the time control returns to prosodyctl, which then can't see Prosody running)
Matthew Wild <mwild1@gmail.com>
parents: 2510
diff changeset
   329
					show_message("Still waiting...");
a81c710b1708 prosodyctl: Don't display message about failing to start Prosody is daemonizing is disabled (if daemonizing is disabled then Prosody is stopped by the time control returns to prosodyctl, which then can't see Prosody running)
Matthew Wild <mwild1@gmail.com>
parents: 2510
diff changeset
   330
				elseif i >= prosodyctl_timeout then
a81c710b1708 prosodyctl: Don't display message about failing to start Prosody is daemonizing is disabled (if daemonizing is disabled then Prosody is stopped by the time control returns to prosodyctl, which then can't see Prosody running)
Matthew Wild <mwild1@gmail.com>
parents: 2510
diff changeset
   331
					show_message("Prosody is still not running. Please give it some time or check your log files for errors.");
a81c710b1708 prosodyctl: Don't display message about failing to start Prosody is daemonizing is disabled (if daemonizing is disabled then Prosody is stopped by the time control returns to prosodyctl, which then can't see Prosody running)
Matthew Wild <mwild1@gmail.com>
parents: 2510
diff changeset
   332
					return 2;
a81c710b1708 prosodyctl: Don't display message about failing to start Prosody is daemonizing is disabled (if daemonizing is disabled then Prosody is stopped by the time control returns to prosodyctl, which then can't see Prosody running)
Matthew Wild <mwild1@gmail.com>
parents: 2510
diff changeset
   333
				end
a81c710b1708 prosodyctl: Don't display message about failing to start Prosody is daemonizing is disabled (if daemonizing is disabled then Prosody is stopped by the time control returns to prosodyctl, which then can't see Prosody running)
Matthew Wild <mwild1@gmail.com>
parents: 2510
diff changeset
   334
				socket.sleep(0.5);
a81c710b1708 prosodyctl: Don't display message about failing to start Prosody is daemonizing is disabled (if daemonizing is disabled then Prosody is stopped by the time control returns to prosodyctl, which then can't see Prosody running)
Matthew Wild <mwild1@gmail.com>
parents: 2510
diff changeset
   335
				i = i + 1;
1458
fce75b4efda9 prosodyctl: Improve usability with status messages, and waiting up to 5s for the server to start/stop
Matthew Wild <mwild1@gmail.com>
parents: 1390
diff changeset
   336
			end
2511
a81c710b1708 prosodyctl: Don't display message about failing to start Prosody is daemonizing is disabled (if daemonizing is disabled then Prosody is stopped by the time control returns to prosodyctl, which then can't see Prosody running)
Matthew Wild <mwild1@gmail.com>
parents: 2510
diff changeset
   337
			show_message("Started");
1458
fce75b4efda9 prosodyctl: Improve usability with status messages, and waiting up to 5s for the server to start/stop
Matthew Wild <mwild1@gmail.com>
parents: 1390
diff changeset
   338
		end
fce75b4efda9 prosodyctl: Improve usability with status messages, and waiting up to 5s for the server to start/stop
Matthew Wild <mwild1@gmail.com>
parents: 1390
diff changeset
   339
		return 0;
fce75b4efda9 prosodyctl: Improve usability with status messages, and waiting up to 5s for the server to start/stop
Matthew Wild <mwild1@gmail.com>
parents: 1390
diff changeset
   340
	end
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   341
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   342
	show_message("Failed to start Prosody");
7925
2fd20f372cb1 prosodyctl: Trim trailing whitespace
Kim Alvefur <zash@zash.se>
parents: 7923
diff changeset
   343
	show_message(error_messages[ret])
2fd20f372cb1 prosodyctl: Trim trailing whitespace
Kim Alvefur <zash@zash.se>
parents: 7923
diff changeset
   344
	return 1;
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   345
end
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   346
1089
a817cbaa0f46 prosodyctl: Multiple fixes for start/status/stop
Matthew Wild <mwild1@gmail.com>
parents: 1087
diff changeset
   347
function commands.status(arg)
12268
ba712f7559dc prosodyctl: Use argument parsing library to parse --help, -h, -?
Kim Alvefur <zash@zash.se>
parents: 12107
diff changeset
   348
	local opts = parse_args(arg, only_help);
ba712f7559dc prosodyctl: Use argument parsing library to parse --help, -h, -?
Kim Alvefur <zash@zash.se>
parents: 12107
diff changeset
   349
	if opts.help then
1089
a817cbaa0f46 prosodyctl: Multiple fixes for start/status/stop
Matthew Wild <mwild1@gmail.com>
parents: 1087
diff changeset
   350
		show_usage([[status]], [[Reports the running status of Prosody]]);
12269
47d5233a1fc7 prosodyctl: Return success status code from --help
Kim Alvefur <zash@zash.se>
parents: 12268
diff changeset
   351
		return 0;
1089
a817cbaa0f46 prosodyctl: Multiple fixes for start/status/stop
Matthew Wild <mwild1@gmail.com>
parents: 1087
diff changeset
   352
	end
a817cbaa0f46 prosodyctl: Multiple fixes for start/status/stop
Matthew Wild <mwild1@gmail.com>
parents: 1087
diff changeset
   353
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   354
	local ok, ret = prosodyctl.isrunning();
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   355
	if not ok then
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   356
		show_message(error_messages[ret]);
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   357
		return 1;
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   358
	end
7925
2fd20f372cb1 prosodyctl: Trim trailing whitespace
Kim Alvefur <zash@zash.se>
parents: 7923
diff changeset
   359
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   360
	if ret then
8674
a4899174a894 prosodyctl: Large number of changes to satisfy [luacheck], includes bug fixes
Matthew Wild <mwild1@gmail.com>
parents: 8671
diff changeset
   361
		--luacheck: ignore 421/ret
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   362
		local ok, ret = prosodyctl.getpid();
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   363
		if not ok then
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   364
			show_message("Couldn't get running Prosody's PID");
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   365
			show_message(error_messages[ret]);
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   366
			return 1;
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   367
		end
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   368
		show_message("Prosody is running with PID %s", ret or "(unknown)");
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   369
		return 0;
1089
a817cbaa0f46 prosodyctl: Multiple fixes for start/status/stop
Matthew Wild <mwild1@gmail.com>
parents: 1087
diff changeset
   370
	else
a817cbaa0f46 prosodyctl: Multiple fixes for start/status/stop
Matthew Wild <mwild1@gmail.com>
parents: 1087
diff changeset
   371
		show_message("Prosody is not running");
8674
a4899174a894 prosodyctl: Large number of changes to satisfy [luacheck], includes bug fixes
Matthew Wild <mwild1@gmail.com>
parents: 8671
diff changeset
   372
		if not prosody.switched_user and prosody.current_uid ~= 0 then
1122
07b2b5942957 prosodyctl: Reformat note to fit in small-width terminals
Matthew Wild <mwild1@gmail.com>
parents: 1120
diff changeset
   373
			print("\nNote:")
07b2b5942957 prosodyctl: Reformat note to fit in small-width terminals
Matthew Wild <mwild1@gmail.com>
parents: 1120
diff changeset
   374
			print(" You will also see this if prosodyctl is not running under");
07b2b5942957 prosodyctl: Reformat note to fit in small-width terminals
Matthew Wild <mwild1@gmail.com>
parents: 1120
diff changeset
   375
			print(" the same user account as Prosody. Try running as root (e.g. ");
07b2b5942957 prosodyctl: Reformat note to fit in small-width terminals
Matthew Wild <mwild1@gmail.com>
parents: 1120
diff changeset
   376
			print(" with 'sudo' in front) to gain access to Prosody's real status.");
1115
8a7bc1a5eae6 prosodyctl: status: Show warning if we can't find a running Prosody, and we didn't switch user
Matthew Wild <mwild1@gmail.com>
parents: 1114
diff changeset
   377
		end
1089
a817cbaa0f46 prosodyctl: Multiple fixes for start/status/stop
Matthew Wild <mwild1@gmail.com>
parents: 1087
diff changeset
   378
		return 2
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   379
	end
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   380
end
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   381
1089
a817cbaa0f46 prosodyctl: Multiple fixes for start/status/stop
Matthew Wild <mwild1@gmail.com>
parents: 1087
diff changeset
   382
function commands.stop(arg)
12268
ba712f7559dc prosodyctl: Use argument parsing library to parse --help, -h, -?
Kim Alvefur <zash@zash.se>
parents: 12107
diff changeset
   383
	local opts = parse_args(arg, only_help);
ba712f7559dc prosodyctl: Use argument parsing library to parse --help, -h, -?
Kim Alvefur <zash@zash.se>
parents: 12107
diff changeset
   384
	if opts.help then
1089
a817cbaa0f46 prosodyctl: Multiple fixes for start/status/stop
Matthew Wild <mwild1@gmail.com>
parents: 1087
diff changeset
   385
		show_usage([[stop]], [[Stop a running Prosody server]]);
12269
47d5233a1fc7 prosodyctl: Return success status code from --help
Kim Alvefur <zash@zash.se>
parents: 12268
diff changeset
   386
		return 0;
1089
a817cbaa0f46 prosodyctl: Multiple fixes for start/status/stop
Matthew Wild <mwild1@gmail.com>
parents: 1087
diff changeset
   387
	end
a817cbaa0f46 prosodyctl: Multiple fixes for start/status/stop
Matthew Wild <mwild1@gmail.com>
parents: 1087
diff changeset
   388
10612
87003b937672 Log warning when using prosodyctl start/stop/restart
Matthew Wild <mwild1@gmail.com>
parents: 10582
diff changeset
   389
	service_command_warning("stop");
87003b937672 Log warning when using prosodyctl start/stop/restart
Matthew Wild <mwild1@gmail.com>
parents: 10582
diff changeset
   390
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   391
	if not prosodyctl.isrunning() then
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   392
		show_message("Prosody is not running");
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   393
		return 1;
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   394
	end
7925
2fd20f372cb1 prosodyctl: Trim trailing whitespace
Kim Alvefur <zash@zash.se>
parents: 7923
diff changeset
   395
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   396
	local ok, ret = prosodyctl.stop();
1458
fce75b4efda9 prosodyctl: Improve usability with status messages, and waiting up to 5s for the server to start/stop
Matthew Wild <mwild1@gmail.com>
parents: 1390
diff changeset
   397
	if ok then
fce75b4efda9 prosodyctl: Improve usability with status messages, and waiting up to 5s for the server to start/stop
Matthew Wild <mwild1@gmail.com>
parents: 1390
diff changeset
   398
		local i=1;
fce75b4efda9 prosodyctl: Improve usability with status messages, and waiting up to 5s for the server to start/stop
Matthew Wild <mwild1@gmail.com>
parents: 1390
diff changeset
   399
		while true do
fce75b4efda9 prosodyctl: Improve usability with status messages, and waiting up to 5s for the server to start/stop
Matthew Wild <mwild1@gmail.com>
parents: 1390
diff changeset
   400
			local ok, running = prosodyctl.isrunning();
fce75b4efda9 prosodyctl: Improve usability with status messages, and waiting up to 5s for the server to start/stop
Matthew Wild <mwild1@gmail.com>
parents: 1390
diff changeset
   401
			if ok and not running then
fce75b4efda9 prosodyctl: Improve usability with status messages, and waiting up to 5s for the server to start/stop
Matthew Wild <mwild1@gmail.com>
parents: 1390
diff changeset
   402
				break;
fce75b4efda9 prosodyctl: Improve usability with status messages, and waiting up to 5s for the server to start/stop
Matthew Wild <mwild1@gmail.com>
parents: 1390
diff changeset
   403
			elseif i == 5 then
fce75b4efda9 prosodyctl: Improve usability with status messages, and waiting up to 5s for the server to start/stop
Matthew Wild <mwild1@gmail.com>
parents: 1390
diff changeset
   404
				show_message("Still waiting...");
1459
545208bc0e84 prosodyctl: Use prosodyctl_timeout option if it exists in the config
Matthew Wild <mwild1@gmail.com>
parents: 1458
diff changeset
   405
			elseif i >= prosodyctl_timeout then
1458
fce75b4efda9 prosodyctl: Improve usability with status messages, and waiting up to 5s for the server to start/stop
Matthew Wild <mwild1@gmail.com>
parents: 1390
diff changeset
   406
				show_message("Prosody is still running. Please give it some time or check your log files for errors.");
fce75b4efda9 prosodyctl: Improve usability with status messages, and waiting up to 5s for the server to start/stop
Matthew Wild <mwild1@gmail.com>
parents: 1390
diff changeset
   407
				return 2;
fce75b4efda9 prosodyctl: Improve usability with status messages, and waiting up to 5s for the server to start/stop
Matthew Wild <mwild1@gmail.com>
parents: 1390
diff changeset
   408
			end
fce75b4efda9 prosodyctl: Improve usability with status messages, and waiting up to 5s for the server to start/stop
Matthew Wild <mwild1@gmail.com>
parents: 1390
diff changeset
   409
			socket.sleep(0.5);
fce75b4efda9 prosodyctl: Improve usability with status messages, and waiting up to 5s for the server to start/stop
Matthew Wild <mwild1@gmail.com>
parents: 1390
diff changeset
   410
			i = i + 1;
fce75b4efda9 prosodyctl: Improve usability with status messages, and waiting up to 5s for the server to start/stop
Matthew Wild <mwild1@gmail.com>
parents: 1390
diff changeset
   411
		end
fce75b4efda9 prosodyctl: Improve usability with status messages, and waiting up to 5s for the server to start/stop
Matthew Wild <mwild1@gmail.com>
parents: 1390
diff changeset
   412
		show_message("Stopped");
fce75b4efda9 prosodyctl: Improve usability with status messages, and waiting up to 5s for the server to start/stop
Matthew Wild <mwild1@gmail.com>
parents: 1390
diff changeset
   413
		return 0;
fce75b4efda9 prosodyctl: Improve usability with status messages, and waiting up to 5s for the server to start/stop
Matthew Wild <mwild1@gmail.com>
parents: 1390
diff changeset
   414
	end
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   415
1089
a817cbaa0f46 prosodyctl: Multiple fixes for start/status/stop
Matthew Wild <mwild1@gmail.com>
parents: 1087
diff changeset
   416
	show_message(error_messages[ret]);
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   417
	return 1;
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   418
end
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   419
2696
cb5acafbec62 prosodyctl: Add restart command for KSid and johnny :)
Matthew Wild <mwild1@gmail.com>
parents: 2587
diff changeset
   420
function commands.restart(arg)
12268
ba712f7559dc prosodyctl: Use argument parsing library to parse --help, -h, -?
Kim Alvefur <zash@zash.se>
parents: 12107
diff changeset
   421
	local opts = parse_args(arg, only_help);
ba712f7559dc prosodyctl: Use argument parsing library to parse --help, -h, -?
Kim Alvefur <zash@zash.se>
parents: 12107
diff changeset
   422
	if opts.help then
2705
8a5af6f14c07 prosodyctl: Fix 'restart' command to not report itself as the 'stop' command (thanks albert!)
Matthew Wild <mwild1@gmail.com>
parents: 2696
diff changeset
   423
		show_usage([[restart]], [[Restart a running Prosody server]]);
2696
cb5acafbec62 prosodyctl: Add restart command for KSid and johnny :)
Matthew Wild <mwild1@gmail.com>
parents: 2587
diff changeset
   424
		return 1;
cb5acafbec62 prosodyctl: Add restart command for KSid and johnny :)
Matthew Wild <mwild1@gmail.com>
parents: 2587
diff changeset
   425
	end
7925
2fd20f372cb1 prosodyctl: Trim trailing whitespace
Kim Alvefur <zash@zash.se>
parents: 7923
diff changeset
   426
10612
87003b937672 Log warning when using prosodyctl start/stop/restart
Matthew Wild <mwild1@gmail.com>
parents: 10582
diff changeset
   427
	service_command_warning("restart");
87003b937672 Log warning when using prosodyctl start/stop/restart
Matthew Wild <mwild1@gmail.com>
parents: 10582
diff changeset
   428
3724
c12ebbd4ab61 prosodyctl: Make the 'restart' command start Prosody even if it wasn't already running
Matthew Wild <mwild1@gmail.com>
parents: 3630
diff changeset
   429
	commands.stop(arg);
c12ebbd4ab61 prosodyctl: Make the 'restart' command start Prosody even if it wasn't already running
Matthew Wild <mwild1@gmail.com>
parents: 3630
diff changeset
   430
	return commands.start(arg);
2696
cb5acafbec62 prosodyctl: Add restart command for KSid and johnny :)
Matthew Wild <mwild1@gmail.com>
parents: 2587
diff changeset
   431
end
cb5acafbec62 prosodyctl: Add restart command for KSid and johnny :)
Matthew Wild <mwild1@gmail.com>
parents: 2587
diff changeset
   432
4324
5e7cba840409 prosodyctl: Add 'about' command to list Prosody version, directories, and various other stuff
Matthew Wild <mwild1@gmail.com>
parents: 4167
diff changeset
   433
function commands.about(arg)
12268
ba712f7559dc prosodyctl: Use argument parsing library to parse --help, -h, -?
Kim Alvefur <zash@zash.se>
parents: 12107
diff changeset
   434
	local opts = parse_args(arg, only_help);
ba712f7559dc prosodyctl: Use argument parsing library to parse --help, -h, -?
Kim Alvefur <zash@zash.se>
parents: 12107
diff changeset
   435
	if opts.help then
4331
9c45858e3208 prosodyctl: Fix 'about' command to not show up where it shouldn't...
Matthew Wild <mwild1@gmail.com>
parents: 4324
diff changeset
   436
		show_usage([[about]], [[Show information about this Prosody installation]]);
12269
47d5233a1fc7 prosodyctl: Return success status code from --help
Kim Alvefur <zash@zash.se>
parents: 12268
diff changeset
   437
		return 0;
4331
9c45858e3208 prosodyctl: Fix 'about' command to not show up where it shouldn't...
Matthew Wild <mwild1@gmail.com>
parents: 4324
diff changeset
   438
	end
7925
2fd20f372cb1 prosodyctl: Trim trailing whitespace
Kim Alvefur <zash@zash.se>
parents: 7923
diff changeset
   439
6587
c3a56f8847ac prosodyctl: Show relative paths in about
Kim Alvefur <zash@zash.se>
parents: 6504
diff changeset
   440
	local pwd = ".";
12975
7214baed9e9d executables: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12958
diff changeset
   441
	local sorted_pairs = require "prosody.util.iterators".sorted_pairs;
7214baed9e9d executables: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12958
diff changeset
   442
	local hg = require"prosody.util.mercurial";
8674
a4899174a894 prosodyctl: Large number of changes to satisfy [luacheck], includes bug fixes
Matthew Wild <mwild1@gmail.com>
parents: 8671
diff changeset
   443
	local relpath = configmanager.resolve_relative_path;
7925
2fd20f372cb1 prosodyctl: Trim trailing whitespace
Kim Alvefur <zash@zash.se>
parents: 7923
diff changeset
   444
4324
5e7cba840409 prosodyctl: Add 'about' command to list Prosody version, directories, and various other stuff
Matthew Wild <mwild1@gmail.com>
parents: 4167
diff changeset
   445
	print("Prosody "..(prosody.version or "(unknown version)"));
5e7cba840409 prosodyctl: Add 'about' command to list Prosody version, directories, and various other stuff
Matthew Wild <mwild1@gmail.com>
parents: 4167
diff changeset
   446
	print("");
5e7cba840409 prosodyctl: Add 'about' command to list Prosody version, directories, and various other stuff
Matthew Wild <mwild1@gmail.com>
parents: 4167
diff changeset
   447
	print("# Prosody directories");
8638
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents: 8564
diff changeset
   448
	print("Data directory:     "..relpath(pwd, prosody.paths.data));
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents: 8564
diff changeset
   449
	print("Config directory:   "..relpath(pwd, prosody.paths.config or "."));
47e3b8b6f17a prosody, prosodyctl, util.startup: Finally factor out startup-related and common code into a separate module
Matthew Wild <mwild1@gmail.com>
parents: 8564
diff changeset
   450
	print("Source directory:   "..relpath(pwd, prosody.paths.source or "."));
6590
54306208f30b prosodyctl: Expand plugin paths and attempt to identify prosody-modules checkouts
Kim Alvefur <zash@zash.se>
parents: 6589
diff changeset
   451
	print("Plugin directories:")
54306208f30b prosodyctl: Expand plugin paths and attempt to identify prosody-modules checkouts
Kim Alvefur <zash@zash.se>
parents: 6589
diff changeset
   452
	print("  "..(prosody.paths.plugins:gsub("([^;]+);?", function(path)
8674
a4899174a894 prosodyctl: Large number of changes to satisfy [luacheck], includes bug fixes
Matthew Wild <mwild1@gmail.com>
parents: 8671
diff changeset
   453
			path = configmanager.resolve_relative_path(pwd, path);
6590
54306208f30b prosodyctl: Expand plugin paths and attempt to identify prosody-modules checkouts
Kim Alvefur <zash@zash.se>
parents: 6589
diff changeset
   454
			local hgid, hgrepo = hg.check_id(path);
54306208f30b prosodyctl: Expand plugin paths and attempt to identify prosody-modules checkouts
Kim Alvefur <zash@zash.se>
parents: 6589
diff changeset
   455
			if not hgid and hgrepo then
54306208f30b prosodyctl: Expand plugin paths and attempt to identify prosody-modules checkouts
Kim Alvefur <zash@zash.se>
parents: 6589
diff changeset
   456
				return path.." - "..hgrepo .."!\n  ";
54306208f30b prosodyctl: Expand plugin paths and attempt to identify prosody-modules checkouts
Kim Alvefur <zash@zash.se>
parents: 6589
diff changeset
   457
			end
6614
65dd3770bcb0 prosodyctl: Document magic commit ID
Paul Aurich <paul@darkrain42.org>
parents: 6590
diff changeset
   458
			-- 010452cfaf53 is the first commit in the prosody-modules repository
6590
54306208f30b prosodyctl: Expand plugin paths and attempt to identify prosody-modules checkouts
Kim Alvefur <zash@zash.se>
parents: 6589
diff changeset
   459
			hgrepo = hgrepo == "010452cfaf53" and "prosody-modules";
54306208f30b prosodyctl: Expand plugin paths and attempt to identify prosody-modules checkouts
Kim Alvefur <zash@zash.se>
parents: 6589
diff changeset
   460
			return path..(hgid and " - "..(hgrepo or "HG").." rev: "..hgid or "")
54306208f30b prosodyctl: Expand plugin paths and attempt to identify prosody-modules checkouts
Kim Alvefur <zash@zash.se>
parents: 6589
diff changeset
   461
				.."\n  ";
54306208f30b prosodyctl: Expand plugin paths and attempt to identify prosody-modules checkouts
Kim Alvefur <zash@zash.se>
parents: 6589
diff changeset
   462
		end)));
4324
5e7cba840409 prosodyctl: Add 'about' command to list Prosody version, directories, and various other stuff
Matthew Wild <mwild1@gmail.com>
parents: 4167
diff changeset
   463
	print("");
12975
7214baed9e9d executables: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12958
diff changeset
   464
	local have_pposix, pposix = pcall(require, "prosody.util.pposix");
9830
bdc2a024933b prosodyctl: about: Report the current operating system according to uname
Kim Alvefur <zash@zash.se>
parents: 9802
diff changeset
   465
	if have_pposix and pposix.uname then
bdc2a024933b prosodyctl: about: Report the current operating system according to uname
Kim Alvefur <zash@zash.se>
parents: 9802
diff changeset
   466
		print("# Operating system");
bdc2a024933b prosodyctl: about: Report the current operating system according to uname
Kim Alvefur <zash@zash.se>
parents: 9802
diff changeset
   467
		local uname, err = pposix.uname();
bdc2a024933b prosodyctl: about: Report the current operating system according to uname
Kim Alvefur <zash@zash.se>
parents: 9802
diff changeset
   468
		print(uname and uname.sysname .. " " .. uname.release or "Unknown POSIX", err or "");
bdc2a024933b prosodyctl: about: Report the current operating system according to uname
Kim Alvefur <zash@zash.se>
parents: 9802
diff changeset
   469
		print("");
bdc2a024933b prosodyctl: about: Report the current operating system according to uname
Kim Alvefur <zash@zash.se>
parents: 9802
diff changeset
   470
	end
4324
5e7cba840409 prosodyctl: Add 'about' command to list Prosody version, directories, and various other stuff
Matthew Wild <mwild1@gmail.com>
parents: 4167
diff changeset
   471
	print("# Lua environment");
5e7cba840409 prosodyctl: Add 'about' command to list Prosody version, directories, and various other stuff
Matthew Wild <mwild1@gmail.com>
parents: 4167
diff changeset
   472
	print("Lua version:             ", _G._VERSION);
5e7cba840409 prosodyctl: Add 'about' command to list Prosody version, directories, and various other stuff
Matthew Wild <mwild1@gmail.com>
parents: 4167
diff changeset
   473
	print("");
5e7cba840409 prosodyctl: Add 'about' command to list Prosody version, directories, and various other stuff
Matthew Wild <mwild1@gmail.com>
parents: 4167
diff changeset
   474
	print("Lua module search paths:");
5e7cba840409 prosodyctl: Add 'about' command to list Prosody version, directories, and various other stuff
Matthew Wild <mwild1@gmail.com>
parents: 4167
diff changeset
   475
	for path in package.path:gmatch("[^;]+") do
5e7cba840409 prosodyctl: Add 'about' command to list Prosody version, directories, and various other stuff
Matthew Wild <mwild1@gmail.com>
parents: 4167
diff changeset
   476
		print("  "..path);
5e7cba840409 prosodyctl: Add 'about' command to list Prosody version, directories, and various other stuff
Matthew Wild <mwild1@gmail.com>
parents: 4167
diff changeset
   477
	end
5e7cba840409 prosodyctl: Add 'about' command to list Prosody version, directories, and various other stuff
Matthew Wild <mwild1@gmail.com>
parents: 4167
diff changeset
   478
	print("");
5e7cba840409 prosodyctl: Add 'about' command to list Prosody version, directories, and various other stuff
Matthew Wild <mwild1@gmail.com>
parents: 4167
diff changeset
   479
	print("Lua C module search paths:");
5e7cba840409 prosodyctl: Add 'about' command to list Prosody version, directories, and various other stuff
Matthew Wild <mwild1@gmail.com>
parents: 4167
diff changeset
   480
	for path in package.cpath:gmatch("[^;]+") do
5e7cba840409 prosodyctl: Add 'about' command to list Prosody version, directories, and various other stuff
Matthew Wild <mwild1@gmail.com>
parents: 4167
diff changeset
   481
		print("  "..path);
5e7cba840409 prosodyctl: Add 'about' command to list Prosody version, directories, and various other stuff
Matthew Wild <mwild1@gmail.com>
parents: 4167
diff changeset
   482
	end
5e7cba840409 prosodyctl: Add 'about' command to list Prosody version, directories, and various other stuff
Matthew Wild <mwild1@gmail.com>
parents: 4167
diff changeset
   483
	print("");
8704
b7a22baaf55f prosodyctl: Increase robustness in luarocks version detection (fixes #1003)
Kim Alvefur <zash@zash.se>
parents: 8674
diff changeset
   484
	local luarocks_status = "Not installed"
b7a22baaf55f prosodyctl: Increase robustness in luarocks version detection (fixes #1003)
Kim Alvefur <zash@zash.se>
parents: 8674
diff changeset
   485
	if pcall(require, "luarocks.loader") then
b7a22baaf55f prosodyctl: Increase robustness in luarocks version detection (fixes #1003)
Kim Alvefur <zash@zash.se>
parents: 8674
diff changeset
   486
		luarocks_status = "Installed (2.x+)";
b7a22baaf55f prosodyctl: Increase robustness in luarocks version detection (fixes #1003)
Kim Alvefur <zash@zash.se>
parents: 8674
diff changeset
   487
		if package.loaded["luarocks.cfg"] then
b7a22baaf55f prosodyctl: Increase robustness in luarocks version detection (fixes #1003)
Kim Alvefur <zash@zash.se>
parents: 8674
diff changeset
   488
			luarocks_status = "Installed ("..(package.loaded["luarocks.cfg"].program_version or "2.x+")..")";
b7a22baaf55f prosodyctl: Increase robustness in luarocks version detection (fixes #1003)
Kim Alvefur <zash@zash.se>
parents: 8674
diff changeset
   489
		end
b7a22baaf55f prosodyctl: Increase robustness in luarocks version detection (fixes #1003)
Kim Alvefur <zash@zash.se>
parents: 8674
diff changeset
   490
	elseif pcall(require, "luarocks.require") then
b7a22baaf55f prosodyctl: Increase robustness in luarocks version detection (fixes #1003)
Kim Alvefur <zash@zash.se>
parents: 8674
diff changeset
   491
		luarocks_status = "Installed (1.x)";
b7a22baaf55f prosodyctl: Increase robustness in luarocks version detection (fixes #1003)
Kim Alvefur <zash@zash.se>
parents: 8674
diff changeset
   492
	end
4333
040193dead77 prosodyctl: Add info about the presence of LuaRocks to 'about' command
Matthew Wild <mwild1@gmail.com>
parents: 4331
diff changeset
   493
	print("LuaRocks:        ", luarocks_status);
040193dead77 prosodyctl: Add info about the presence of LuaRocks to 'about' command
Matthew Wild <mwild1@gmail.com>
parents: 4331
diff changeset
   494
	print("");
9860
4be2af104bf0 prosodyctl about: Report network backend in use
Matthew Wild <mwild1@gmail.com>
parents: 9713
diff changeset
   495
	print("# Network");
4be2af104bf0 prosodyctl about: Report network backend in use
Matthew Wild <mwild1@gmail.com>
parents: 9713
diff changeset
   496
	print("");
12975
7214baed9e9d executables: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12958
diff changeset
   497
	print("Backend: "..require "prosody.net.server".get_backend());
9860
4be2af104bf0 prosodyctl about: Report network backend in use
Matthew Wild <mwild1@gmail.com>
parents: 9713
diff changeset
   498
	print("");
4324
5e7cba840409 prosodyctl: Add 'about' command to list Prosody version, directories, and various other stuff
Matthew Wild <mwild1@gmail.com>
parents: 4167
diff changeset
   499
	print("# Lua module versions");
5e7cba840409 prosodyctl: Add 'about' command to list Prosody version, directories, and various other stuff
Matthew Wild <mwild1@gmail.com>
parents: 4167
diff changeset
   500
	local module_versions, longest_name = {}, 8;
11007
c82ede8892fc prosodyctl about: Split out libraries into a separate section
Kim Alvefur <zash@zash.se>
parents: 11006
diff changeset
   501
	local library_versions = {};
8674
a4899174a894 prosodyctl: Large number of changes to satisfy [luacheck], includes bug fixes
Matthew Wild <mwild1@gmail.com>
parents: 8671
diff changeset
   502
	dependencies.softreq"ssl";
9995
8cd180dc18a8 prosodyctl: Include version of LuaDBI in 'about'
Kim Alvefur <zash@zash.se>
parents: 9860
diff changeset
   503
	dependencies.softreq"DBI";
12439
1ee72c0013f3 prosodyctl about: Report version of lua-readline
Kim Alvefur <zash@zash.se>
parents: 12296
diff changeset
   504
	dependencies.softreq"readline";
11008
d175de07dd73 prosodyctl about: Substitute better names for some Lua modules
Kim Alvefur <zash@zash.se>
parents: 11007
diff changeset
   505
	local friendly_names = {
d175de07dd73 prosodyctl about: Substitute better names for some Lua modules
Kim Alvefur <zash@zash.se>
parents: 11007
diff changeset
   506
		DBI = "LuaDBI";
d175de07dd73 prosodyctl about: Substitute better names for some Lua modules
Kim Alvefur <zash@zash.se>
parents: 11007
diff changeset
   507
		lfs = "LuaFileSystem";
d175de07dd73 prosodyctl about: Substitute better names for some Lua modules
Kim Alvefur <zash@zash.se>
parents: 11007
diff changeset
   508
		lunbound = "luaunbound";
d175de07dd73 prosodyctl about: Substitute better names for some Lua modules
Kim Alvefur <zash@zash.se>
parents: 11007
diff changeset
   509
		lxp = "LuaExpat";
d175de07dd73 prosodyctl about: Substitute better names for some Lua modules
Kim Alvefur <zash@zash.se>
parents: 11007
diff changeset
   510
		socket = "LuaSocket";
d175de07dd73 prosodyctl about: Substitute better names for some Lua modules
Kim Alvefur <zash@zash.se>
parents: 11007
diff changeset
   511
		ssl = "LuaSec";
d175de07dd73 prosodyctl about: Substitute better names for some Lua modules
Kim Alvefur <zash@zash.se>
parents: 11007
diff changeset
   512
	};
12439
1ee72c0013f3 prosodyctl about: Report version of lua-readline
Kim Alvefur <zash@zash.se>
parents: 12296
diff changeset
   513
	local alternate_version_fields = {
1ee72c0013f3 prosodyctl about: Report version of lua-readline
Kim Alvefur <zash@zash.se>
parents: 12296
diff changeset
   514
		-- These diverge from the module._VERSION convention
1ee72c0013f3 prosodyctl about: Report version of lua-readline
Kim Alvefur <zash@zash.se>
parents: 12296
diff changeset
   515
		readline = "Version";
1ee72c0013f3 prosodyctl about: Report version of lua-readline
Kim Alvefur <zash@zash.se>
parents: 12296
diff changeset
   516
	}
10968
d6a3d652ca32 prosodyctl about: Report versions of luaunbound and libunbound
Kim Alvefur <zash@zash.se>
parents: 10909
diff changeset
   517
	local lunbound = dependencies.softreq"lunbound";
11564
3bbb1af92514 Merge 0.11->trunk
Matthew Wild <mwild1@gmail.com>
parents: 11305 11556
diff changeset
   518
	local lxp = dependencies.softreq"lxp";
12975
7214baed9e9d executables: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12958
diff changeset
   519
	local hashes = dependencies.softreq"prosody.util.hashes";
4324
5e7cba840409 prosodyctl: Add 'about' command to list Prosody version, directories, and various other stuff
Matthew Wild <mwild1@gmail.com>
parents: 4167
diff changeset
   520
	for name, module in pairs(package.loaded) do
12439
1ee72c0013f3 prosodyctl about: Report version of lua-readline
Kim Alvefur <zash@zash.se>
parents: 12296
diff changeset
   521
		local version_field = alternate_version_fields[name] or "_VERSION";
1ee72c0013f3 prosodyctl about: Report version of lua-readline
Kim Alvefur <zash@zash.se>
parents: 12296
diff changeset
   522
		if type(module) == "table" and rawget(module, version_field)
11008
d175de07dd73 prosodyctl about: Substitute better names for some Lua modules
Kim Alvefur <zash@zash.se>
parents: 11007
diff changeset
   523
			and name ~= "_G" and not name:match("%.") then
d175de07dd73 prosodyctl about: Substitute better names for some Lua modules
Kim Alvefur <zash@zash.se>
parents: 11007
diff changeset
   524
			name = friendly_names[name] or name;
4324
5e7cba840409 prosodyctl: Add 'about' command to list Prosody version, directories, and various other stuff
Matthew Wild <mwild1@gmail.com>
parents: 4167
diff changeset
   525
			if #name > longest_name then
5e7cba840409 prosodyctl: Add 'about' command to list Prosody version, directories, and various other stuff
Matthew Wild <mwild1@gmail.com>
parents: 4167
diff changeset
   526
				longest_name = #name;
5e7cba840409 prosodyctl: Add 'about' command to list Prosody version, directories, and various other stuff
Matthew Wild <mwild1@gmail.com>
parents: 4167
diff changeset
   527
			end
12439
1ee72c0013f3 prosodyctl about: Report version of lua-readline
Kim Alvefur <zash@zash.se>
parents: 12296
diff changeset
   528
			local mod_version = module[version_field];
11009
cff243aafdce prosodyctl about: Strip name from lua module _VERSION
Kim Alvefur <zash@zash.se>
parents: 11008
diff changeset
   529
			if tostring(mod_version):sub(1, #name+1) == name .. " " then
cff243aafdce prosodyctl about: Strip name from lua module _VERSION
Kim Alvefur <zash@zash.se>
parents: 11008
diff changeset
   530
				mod_version = mod_version:sub(#name+2);
cff243aafdce prosodyctl about: Strip name from lua module _VERSION
Kim Alvefur <zash@zash.se>
parents: 11008
diff changeset
   531
			end
cff243aafdce prosodyctl about: Strip name from lua module _VERSION
Kim Alvefur <zash@zash.se>
parents: 11008
diff changeset
   532
			module_versions[name] = mod_version;
4324
5e7cba840409 prosodyctl: Add 'about' command to list Prosody version, directories, and various other stuff
Matthew Wild <mwild1@gmail.com>
parents: 4167
diff changeset
   533
		end
5e7cba840409 prosodyctl: Add 'about' command to list Prosody version, directories, and various other stuff
Matthew Wild <mwild1@gmail.com>
parents: 4167
diff changeset
   534
	end
10968
d6a3d652ca32 prosodyctl about: Report versions of luaunbound and libunbound
Kim Alvefur <zash@zash.se>
parents: 10909
diff changeset
   535
	if lunbound then
11010
8ac958938e0f prosodyctl about: Show longer name for luaunbound
Kim Alvefur <zash@zash.se>
parents: 11009
diff changeset
   536
		if not module_versions["luaunbound"] then
8ac958938e0f prosodyctl about: Show longer name for luaunbound
Kim Alvefur <zash@zash.se>
parents: 11009
diff changeset
   537
			module_versions["luaunbound"] = "0.5 (?)";
10968
d6a3d652ca32 prosodyctl about: Report versions of luaunbound and libunbound
Kim Alvefur <zash@zash.se>
parents: 10909
diff changeset
   538
		end
11007
c82ede8892fc prosodyctl about: Split out libraries into a separate section
Kim Alvefur <zash@zash.se>
parents: 11006
diff changeset
   539
		library_versions["libunbound"] = lunbound._LIBVER;
7252
c49f69bb68f7 prosodyctl: Include libevent version in "about" output if luaevent is available
Kim Alvefur <zash@zash.se>
parents: 7216
diff changeset
   540
	end
11556
d4b735272a61 prosodyctl about: Report libexpat version if known
Matthew Wild <mwild1@gmail.com>
parents: 11533
diff changeset
   541
	if lxp then
11564
3bbb1af92514 Merge 0.11->trunk
Matthew Wild <mwild1@gmail.com>
parents: 11305 11556
diff changeset
   542
		library_versions["libexpat"] = lxp._EXPAT_VERSION;
3bbb1af92514 Merge 0.11->trunk
Matthew Wild <mwild1@gmail.com>
parents: 11305 11556
diff changeset
   543
	end
11567
0983653cbfdf prosodyctl: Report OpenSSL version
Kim Alvefur <zash@zash.se>
parents: 11564
diff changeset
   544
	if hashes then
0983653cbfdf prosodyctl: Report OpenSSL version
Kim Alvefur <zash@zash.se>
parents: 11564
diff changeset
   545
		library_versions["libcrypto"] = hashes._LIBCRYPTO_VERSION;
0983653cbfdf prosodyctl: Report OpenSSL version
Kim Alvefur <zash@zash.se>
parents: 11564
diff changeset
   546
	end
11006
b0766f2603e9 prosodyctl about: Use library function for sorted listing of lua modules
Kim Alvefur <zash@zash.se>
parents: 10968
diff changeset
   547
	for name, version in sorted_pairs(module_versions) do
b0766f2603e9 prosodyctl about: Use library function for sorted listing of lua modules
Kim Alvefur <zash@zash.se>
parents: 10968
diff changeset
   548
		print(name..":"..string.rep(" ", longest_name-#name), version);
11556
d4b735272a61 prosodyctl about: Report libexpat version if known
Matthew Wild <mwild1@gmail.com>
parents: 11533
diff changeset
   549
	end
4324
5e7cba840409 prosodyctl: Add 'about' command to list Prosody version, directories, and various other stuff
Matthew Wild <mwild1@gmail.com>
parents: 4167
diff changeset
   550
	print("");
11007
c82ede8892fc prosodyctl about: Split out libraries into a separate section
Kim Alvefur <zash@zash.se>
parents: 11006
diff changeset
   551
	print("# library versions");
12975
7214baed9e9d executables: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12958
diff changeset
   552
	if require "prosody.net.server".event_base then
11007
c82ede8892fc prosodyctl about: Split out libraries into a separate section
Kim Alvefur <zash@zash.se>
parents: 11006
diff changeset
   553
		library_versions["libevent"] = require"luaevent".core.libevent_version();
c82ede8892fc prosodyctl about: Split out libraries into a separate section
Kim Alvefur <zash@zash.se>
parents: 11006
diff changeset
   554
	end
c82ede8892fc prosodyctl about: Split out libraries into a separate section
Kim Alvefur <zash@zash.se>
parents: 11006
diff changeset
   555
	for name, version in sorted_pairs(library_versions) do
c82ede8892fc prosodyctl about: Split out libraries into a separate section
Kim Alvefur <zash@zash.se>
parents: 11006
diff changeset
   556
		print(name..":"..string.rep(" ", longest_name-#name), version);
4324
5e7cba840409 prosodyctl: Add 'about' command to list Prosody version, directories, and various other stuff
Matthew Wild <mwild1@gmail.com>
parents: 4167
diff changeset
   557
	end
5e7cba840409 prosodyctl: Add 'about' command to list Prosody version, directories, and various other stuff
Matthew Wild <mwild1@gmail.com>
parents: 4167
diff changeset
   558
	print("");
5e7cba840409 prosodyctl: Add 'about' command to list Prosody version, directories, and various other stuff
Matthew Wild <mwild1@gmail.com>
parents: 4167
diff changeset
   559
end
5e7cba840409 prosodyctl: Add 'about' command to list Prosody version, directories, and various other stuff
Matthew Wild <mwild1@gmail.com>
parents: 4167
diff changeset
   560
4335
3a2a01432b5c Add "reload" command to prosodyctl
Vladimir Protasov <eoranged@ya.ru>
parents: 4334
diff changeset
   561
function commands.reload(arg)
12268
ba712f7559dc prosodyctl: Use argument parsing library to parse --help, -h, -?
Kim Alvefur <zash@zash.se>
parents: 12107
diff changeset
   562
	local opts = parse_args(arg, only_help);
ba712f7559dc prosodyctl: Use argument parsing library to parse --help, -h, -?
Kim Alvefur <zash@zash.se>
parents: 12107
diff changeset
   563
	if opts.help then
4476
53ce21286b8c prosodyctl: Adjust description of 'reload' command (thanks crocket)
Matthew Wild <mwild1@gmail.com>
parents: 4336
diff changeset
   564
		show_usage([[reload]], [[Reload Prosody's configuration and re-open log files]]);
12269
47d5233a1fc7 prosodyctl: Return success status code from --help
Kim Alvefur <zash@zash.se>
parents: 12268
diff changeset
   565
		return 0;
4335
3a2a01432b5c Add "reload" command to prosodyctl
Vladimir Protasov <eoranged@ya.ru>
parents: 4334
diff changeset
   566
	end
3a2a01432b5c Add "reload" command to prosodyctl
Vladimir Protasov <eoranged@ya.ru>
parents: 4334
diff changeset
   567
13171
6226f75f55a7 prosodyctl: Add experimental way to reload specific modules directly
Kim Alvefur <zash@zash.se>
parents: 13063
diff changeset
   568
	if arg[1] and arg[1]:match"^mod_" then
6226f75f55a7 prosodyctl: Add experimental way to reload specific modules directly
Kim Alvefur <zash@zash.se>
parents: 13063
diff changeset
   569
		-- TODO reword the usage text, document
6226f75f55a7 prosodyctl: Add experimental way to reload specific modules directly
Kim Alvefur <zash@zash.se>
parents: 13063
diff changeset
   570
		local shell = require "prosody.util.prosodyctl.shell";
6226f75f55a7 prosodyctl: Add experimental way to reload specific modules directly
Kim Alvefur <zash@zash.se>
parents: 13063
diff changeset
   571
		arg[1] = arg[1]:match("^mod_(.*)"); -- strip mod_ prefix
6226f75f55a7 prosodyctl: Add experimental way to reload specific modules directly
Kim Alvefur <zash@zash.se>
parents: 13063
diff changeset
   572
		table.insert(arg, 1, "module");
6226f75f55a7 prosodyctl: Add experimental way to reload specific modules directly
Kim Alvefur <zash@zash.se>
parents: 13063
diff changeset
   573
		table.insert(arg, 2, "reload");
6226f75f55a7 prosodyctl: Add experimental way to reload specific modules directly
Kim Alvefur <zash@zash.se>
parents: 13063
diff changeset
   574
		return shell.shell(arg);
6226f75f55a7 prosodyctl: Add experimental way to reload specific modules directly
Kim Alvefur <zash@zash.se>
parents: 13063
diff changeset
   575
	end
6226f75f55a7 prosodyctl: Add experimental way to reload specific modules directly
Kim Alvefur <zash@zash.se>
parents: 13063
diff changeset
   576
10612
87003b937672 Log warning when using prosodyctl start/stop/restart
Matthew Wild <mwild1@gmail.com>
parents: 10582
diff changeset
   577
	service_command_warning("reload");
87003b937672 Log warning when using prosodyctl start/stop/restart
Matthew Wild <mwild1@gmail.com>
parents: 10582
diff changeset
   578
4335
3a2a01432b5c Add "reload" command to prosodyctl
Vladimir Protasov <eoranged@ya.ru>
parents: 4334
diff changeset
   579
	if not prosodyctl.isrunning() then
3a2a01432b5c Add "reload" command to prosodyctl
Vladimir Protasov <eoranged@ya.ru>
parents: 4334
diff changeset
   580
		show_message("Prosody is not running");
3a2a01432b5c Add "reload" command to prosodyctl
Vladimir Protasov <eoranged@ya.ru>
parents: 4334
diff changeset
   581
		return 1;
3a2a01432b5c Add "reload" command to prosodyctl
Vladimir Protasov <eoranged@ya.ru>
parents: 4334
diff changeset
   582
	end
7925
2fd20f372cb1 prosodyctl: Trim trailing whitespace
Kim Alvefur <zash@zash.se>
parents: 7923
diff changeset
   583
4335
3a2a01432b5c Add "reload" command to prosodyctl
Vladimir Protasov <eoranged@ya.ru>
parents: 4334
diff changeset
   584
	local ok, ret = prosodyctl.reload();
3a2a01432b5c Add "reload" command to prosodyctl
Vladimir Protasov <eoranged@ya.ru>
parents: 4334
diff changeset
   585
	if ok then
7925
2fd20f372cb1 prosodyctl: Trim trailing whitespace
Kim Alvefur <zash@zash.se>
parents: 7923
diff changeset
   586
4336
abcbcb15205c prosodyctl: Update message on reload success
Matthew Wild <mwild1@gmail.com>
parents: 4335
diff changeset
   587
		show_message("Prosody log files re-opened and config file reloaded. You may need to reload modules for some changes to take effect.");
4335
3a2a01432b5c Add "reload" command to prosodyctl
Vladimir Protasov <eoranged@ya.ru>
parents: 4334
diff changeset
   588
		return 0;
3a2a01432b5c Add "reload" command to prosodyctl
Vladimir Protasov <eoranged@ya.ru>
parents: 4334
diff changeset
   589
	end
3a2a01432b5c Add "reload" command to prosodyctl
Vladimir Protasov <eoranged@ya.ru>
parents: 4334
diff changeset
   590
3a2a01432b5c Add "reload" command to prosodyctl
Vladimir Protasov <eoranged@ya.ru>
parents: 4334
diff changeset
   591
	show_message(error_messages[ret]);
3a2a01432b5c Add "reload" command to prosodyctl
Vladimir Protasov <eoranged@ya.ru>
parents: 4334
diff changeset
   592
	return 1;
3a2a01432b5c Add "reload" command to prosodyctl
Vladimir Protasov <eoranged@ya.ru>
parents: 4334
diff changeset
   593
end
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   594
-- ejabberdctl compatibility
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   595
12593
39ae08180c81 compat: Remove handling of Lua 5.1 location of 'unpack' function
Kim Alvefur <zash@zash.se>
parents: 12582
diff changeset
   596
local unpack = table.unpack;
7923
1db51061342b prosodyctl: Handle move of 'unpack' in Lua 5.2
Kim Alvefur <zash@zash.se>
parents: 7682
diff changeset
   597
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   598
function commands.register(arg)
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   599
	local user, host, password = unpack(arg);
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   600
	if (not (user and host)) or arg[1] == "--help" then
1102
c81df501fd38 prosodyctl: Hide ejabberd compatibility commands from command listing
Matthew Wild <mwild1@gmail.com>
parents: 1089
diff changeset
   601
		if user ~= "--help" then
c81df501fd38 prosodyctl: Hide ejabberd compatibility commands from command listing
Matthew Wild <mwild1@gmail.com>
parents: 1089
diff changeset
   602
			if not user then
c81df501fd38 prosodyctl: Hide ejabberd compatibility commands from command listing
Matthew Wild <mwild1@gmail.com>
parents: 1089
diff changeset
   603
				show_message [[No username specified]]
c81df501fd38 prosodyctl: Hide ejabberd compatibility commands from command listing
Matthew Wild <mwild1@gmail.com>
parents: 1089
diff changeset
   604
			elseif not host then
c81df501fd38 prosodyctl: Hide ejabberd compatibility commands from command listing
Matthew Wild <mwild1@gmail.com>
parents: 1089
diff changeset
   605
				show_message [[Please specify which host you want to register the user on]];
c81df501fd38 prosodyctl: Hide ejabberd compatibility commands from command listing
Matthew Wild <mwild1@gmail.com>
parents: 1089
diff changeset
   606
			end
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   607
		end
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   608
		show_usage("register USER HOST [PASSWORD]", "Register a user on the server, with the given password");
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   609
		return 1;
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   610
	end
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   611
	if not password then
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   612
		password = read_password();
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   613
		if not password then
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   614
			show_message [[Unable to register user with no password]];
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   615
			return 1;
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   616
		end
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   617
	end
7925
2fd20f372cb1 prosodyctl: Trim trailing whitespace
Kim Alvefur <zash@zash.se>
parents: 7923
diff changeset
   618
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   619
	local ok, msg = prosodyctl.adduser { user = user, host = host, password = password };
7925
2fd20f372cb1 prosodyctl: Trim trailing whitespace
Kim Alvefur <zash@zash.se>
parents: 7923
diff changeset
   620
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   621
	if ok then return 0; end
7925
2fd20f372cb1 prosodyctl: Trim trailing whitespace
Kim Alvefur <zash@zash.se>
parents: 7923
diff changeset
   622
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   623
	show_message(error_messages[msg])
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   624
	return 1;
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   625
end
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   626
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   627
function commands.unregister(arg)
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   628
	local user, host = unpack(arg);
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   629
	if (not (user and host)) or arg[1] == "--help" then
1102
c81df501fd38 prosodyctl: Hide ejabberd compatibility commands from command listing
Matthew Wild <mwild1@gmail.com>
parents: 1089
diff changeset
   630
		if user ~= "--help" then
c81df501fd38 prosodyctl: Hide ejabberd compatibility commands from command listing
Matthew Wild <mwild1@gmail.com>
parents: 1089
diff changeset
   631
			if not user then
c81df501fd38 prosodyctl: Hide ejabberd compatibility commands from command listing
Matthew Wild <mwild1@gmail.com>
parents: 1089
diff changeset
   632
				show_message [[No username specified]]
c81df501fd38 prosodyctl: Hide ejabberd compatibility commands from command listing
Matthew Wild <mwild1@gmail.com>
parents: 1089
diff changeset
   633
			elseif not host then
c81df501fd38 prosodyctl: Hide ejabberd compatibility commands from command listing
Matthew Wild <mwild1@gmail.com>
parents: 1089
diff changeset
   634
				show_message [[Please specify which host you want to unregister the user from]];
c81df501fd38 prosodyctl: Hide ejabberd compatibility commands from command listing
Matthew Wild <mwild1@gmail.com>
parents: 1089
diff changeset
   635
			end
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   636
		end
1102
c81df501fd38 prosodyctl: Hide ejabberd compatibility commands from command listing
Matthew Wild <mwild1@gmail.com>
parents: 1089
diff changeset
   637
		show_usage("unregister USER HOST [PASSWORD]", "Permanently remove a user account from the server");
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   638
		return 1;
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   639
	end
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   640
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   641
	local ok, msg = prosodyctl.deluser { user = user, host = host };
7925
2fd20f372cb1 prosodyctl: Trim trailing whitespace
Kim Alvefur <zash@zash.se>
parents: 7923
diff changeset
   642
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   643
	if ok then return 0; end
7925
2fd20f372cb1 prosodyctl: Trim trailing whitespace
Kim Alvefur <zash@zash.se>
parents: 7923
diff changeset
   644
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   645
	show_message(error_messages[msg])
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   646
	return 1;
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   647
end
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   648
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   649
---------------------
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   650
12975
7214baed9e9d executables: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12958
diff changeset
   651
local async = require "prosody.util.async";
7214baed9e9d executables: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12958
diff changeset
   652
local server = require "prosody.net.server";
8655
03bb534593cb prosodyctl: Run commands inside async context
Matthew Wild <mwild1@gmail.com>
parents: 8638
diff changeset
   653
local watchers = {
03bb534593cb prosodyctl: Run commands inside async context
Matthew Wild <mwild1@gmail.com>
parents: 8638
diff changeset
   654
	error = function (_, err)
03bb534593cb prosodyctl: Run commands inside async context
Matthew Wild <mwild1@gmail.com>
parents: 8638
diff changeset
   655
		error(err);
03bb534593cb prosodyctl: Run commands inside async context
Matthew Wild <mwild1@gmail.com>
parents: 8638
diff changeset
   656
	end;
03bb534593cb prosodyctl: Run commands inside async context
Matthew Wild <mwild1@gmail.com>
parents: 8638
diff changeset
   657
	waiting = function ()
03bb534593cb prosodyctl: Run commands inside async context
Matthew Wild <mwild1@gmail.com>
parents: 8638
diff changeset
   658
		server.loop();
03bb534593cb prosodyctl: Run commands inside async context
Matthew Wild <mwild1@gmail.com>
parents: 8638
diff changeset
   659
	end;
03bb534593cb prosodyctl: Run commands inside async context
Matthew Wild <mwild1@gmail.com>
parents: 8638
diff changeset
   660
};
03bb534593cb prosodyctl: Run commands inside async context
Matthew Wild <mwild1@gmail.com>
parents: 8638
diff changeset
   661
local command_runner = async.runner(function ()
03bb534593cb prosodyctl: Run commands inside async context
Matthew Wild <mwild1@gmail.com>
parents: 8638
diff changeset
   662
	if command and command:match("^mod_") then -- Is a command in a module
03bb534593cb prosodyctl: Run commands inside async context
Matthew Wild <mwild1@gmail.com>
parents: 8638
diff changeset
   663
		local module_name = command:match("^mod_(.+)");
8674
a4899174a894 prosodyctl: Large number of changes to satisfy [luacheck], includes bug fixes
Matthew Wild <mwild1@gmail.com>
parents: 8671
diff changeset
   664
		do
a4899174a894 prosodyctl: Large number of changes to satisfy [luacheck], includes bug fixes
Matthew Wild <mwild1@gmail.com>
parents: 8671
diff changeset
   665
			local ret, err = modulemanager.load("*", module_name);
a4899174a894 prosodyctl: Large number of changes to satisfy [luacheck], includes bug fixes
Matthew Wild <mwild1@gmail.com>
parents: 8671
diff changeset
   666
			if not ret then
a4899174a894 prosodyctl: Large number of changes to satisfy [luacheck], includes bug fixes
Matthew Wild <mwild1@gmail.com>
parents: 8671
diff changeset
   667
				show_message("Failed to load module '"..module_name.."': "..err);
a4899174a894 prosodyctl: Large number of changes to satisfy [luacheck], includes bug fixes
Matthew Wild <mwild1@gmail.com>
parents: 8671
diff changeset
   668
				os.exit(1);
a4899174a894 prosodyctl: Large number of changes to satisfy [luacheck], includes bug fixes
Matthew Wild <mwild1@gmail.com>
parents: 8671
diff changeset
   669
			end
1390
ef672c9fe7c9 prosodyctl: Allow commands to be implemented in modules
Matthew Wild <mwild1@gmail.com>
parents: 1205
diff changeset
   670
		end
8655
03bb534593cb prosodyctl: Run commands inside async context
Matthew Wild <mwild1@gmail.com>
parents: 8638
diff changeset
   671
03bb534593cb prosodyctl: Run commands inside async context
Matthew Wild <mwild1@gmail.com>
parents: 8638
diff changeset
   672
		local module = modulemanager.get_module("*", module_name);
03bb534593cb prosodyctl: Run commands inside async context
Matthew Wild <mwild1@gmail.com>
parents: 8638
diff changeset
   673
		if not module then
03bb534593cb prosodyctl: Run commands inside async context
Matthew Wild <mwild1@gmail.com>
parents: 8638
diff changeset
   674
			show_message("Failed to load module '"..module_name.."': Unknown error");
03bb534593cb prosodyctl: Run commands inside async context
Matthew Wild <mwild1@gmail.com>
parents: 8638
diff changeset
   675
			os.exit(1);
03bb534593cb prosodyctl: Run commands inside async context
Matthew Wild <mwild1@gmail.com>
parents: 8638
diff changeset
   676
		end
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   677
8655
03bb534593cb prosodyctl: Run commands inside async context
Matthew Wild <mwild1@gmail.com>
parents: 8638
diff changeset
   678
		if not modulemanager.module_has_method(module, "command") then
03bb534593cb prosodyctl: Run commands inside async context
Matthew Wild <mwild1@gmail.com>
parents: 8638
diff changeset
   679
			show_message("Fail: mod_"..module_name.." does not support any commands");
03bb534593cb prosodyctl: Run commands inside async context
Matthew Wild <mwild1@gmail.com>
parents: 8638
diff changeset
   680
			os.exit(1);
03bb534593cb prosodyctl: Run commands inside async context
Matthew Wild <mwild1@gmail.com>
parents: 8638
diff changeset
   681
		end
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   682
8655
03bb534593cb prosodyctl: Run commands inside async context
Matthew Wild <mwild1@gmail.com>
parents: 8638
diff changeset
   683
		local ok, ret = modulemanager.call_module_method(module, "command", arg);
03bb534593cb prosodyctl: Run commands inside async context
Matthew Wild <mwild1@gmail.com>
parents: 8638
diff changeset
   684
		if ok then
03bb534593cb prosodyctl: Run commands inside async context
Matthew Wild <mwild1@gmail.com>
parents: 8638
diff changeset
   685
			if type(ret) == "number" then
12867
891edd1ebde6 util.startup: Close state on exit to ensure GC finalizers are called
Kim Alvefur <zash@zash.se>
parents: 12456
diff changeset
   686
				os.exit(ret, true);
8655
03bb534593cb prosodyctl: Run commands inside async context
Matthew Wild <mwild1@gmail.com>
parents: 8638
diff changeset
   687
			elseif type(ret) == "string" then
03bb534593cb prosodyctl: Run commands inside async context
Matthew Wild <mwild1@gmail.com>
parents: 8638
diff changeset
   688
				show_message(ret);
03bb534593cb prosodyctl: Run commands inside async context
Matthew Wild <mwild1@gmail.com>
parents: 8638
diff changeset
   689
			end
12867
891edd1ebde6 util.startup: Close state on exit to ensure GC finalizers are called
Kim Alvefur <zash@zash.se>
parents: 12456
diff changeset
   690
			os.exit(0, true); -- :)
8655
03bb534593cb prosodyctl: Run commands inside async context
Matthew Wild <mwild1@gmail.com>
parents: 8638
diff changeset
   691
		else
13061
20b1526772d2 prosodyctl: Fix using variable content in a format string
Matthew Wild <mwild1@gmail.com>
parents: 12867
diff changeset
   692
			show_message("Failed to execute command: %s", error_messages[ret]);
8655
03bb534593cb prosodyctl: Run commands inside async context
Matthew Wild <mwild1@gmail.com>
parents: 8638
diff changeset
   693
			os.exit(1); -- :(
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   694
		end
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   695
	end
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   696
10909
709255e332d8 prosodyctl: Fix traceback when no command provided (thanks Zash)
Matthew Wild <mwild1@gmail.com>
parents: 10875
diff changeset
   697
	if command and not commands[command] then
12975
7214baed9e9d executables: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12958
diff changeset
   698
		local ok, command_module = pcall(require, "prosody.util.prosodyctl."..command);
10875
e5dee71d0ebb prosodyctl+util.prosodyctl.*: Start breaking up the ever-growing prosodyctl
Matthew Wild <mwild1@gmail.com>
parents: 10862
diff changeset
   699
		if ok and command_module[command] then
e5dee71d0ebb prosodyctl+util.prosodyctl.*: Start breaking up the ever-growing prosodyctl
Matthew Wild <mwild1@gmail.com>
parents: 10862
diff changeset
   700
			commands[command] = command_module[command];
e5dee71d0ebb prosodyctl+util.prosodyctl.*: Start breaking up the ever-growing prosodyctl
Matthew Wild <mwild1@gmail.com>
parents: 10862
diff changeset
   701
		end
e5dee71d0ebb prosodyctl+util.prosodyctl.*: Start breaking up the ever-growing prosodyctl
Matthew Wild <mwild1@gmail.com>
parents: 10862
diff changeset
   702
	end
e5dee71d0ebb prosodyctl+util.prosodyctl.*: Start breaking up the ever-growing prosodyctl
Matthew Wild <mwild1@gmail.com>
parents: 10862
diff changeset
   703
8655
03bb534593cb prosodyctl: Run commands inside async context
Matthew Wild <mwild1@gmail.com>
parents: 8638
diff changeset
   704
	if not commands[command] then -- Show help for all commands
03bb534593cb prosodyctl: Run commands inside async context
Matthew Wild <mwild1@gmail.com>
parents: 8638
diff changeset
   705
		function show_usage(usage, desc)
11586
a3d48204ec95 prosodyctl: Reorganize help / command list
Kim Alvefur <zash@zash.se>
parents: 11567
diff changeset
   706
			print(string.format(" %-11s    %s", usage, desc));
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   707
		end
8655
03bb534593cb prosodyctl: Run commands inside async context
Matthew Wild <mwild1@gmail.com>
parents: 8638
diff changeset
   708
03bb534593cb prosodyctl: Run commands inside async context
Matthew Wild <mwild1@gmail.com>
parents: 8638
diff changeset
   709
		print("prosodyctl - Manage a Prosody server");
03bb534593cb prosodyctl: Run commands inside async context
Matthew Wild <mwild1@gmail.com>
parents: 8638
diff changeset
   710
		print("");
03bb534593cb prosodyctl: Run commands inside async context
Matthew Wild <mwild1@gmail.com>
parents: 8638
diff changeset
   711
		print("Usage: "..arg[0].." COMMAND [OPTIONS]");
03bb534593cb prosodyctl: Run commands inside async context
Matthew Wild <mwild1@gmail.com>
parents: 8638
diff changeset
   712
		print("");
11586
a3d48204ec95 prosodyctl: Reorganize help / command list
Kim Alvefur <zash@zash.se>
parents: 11567
diff changeset
   713
		print("Where COMMAND may be one of:");
8655
03bb534593cb prosodyctl: Run commands inside async context
Matthew Wild <mwild1@gmail.com>
parents: 8638
diff changeset
   714
12975
7214baed9e9d executables: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents: 12958
diff changeset
   715
		local hidden_commands = require "prosody.util.set".new{ "register", "unregister" };
12106
949c2b52f51e prosodyctl: Reorder help sections
Kim Alvefur <zash@zash.se>
parents: 11888
diff changeset
   716
		local commands_order = {
11586
a3d48204ec95 prosodyctl: Reorganize help / command list
Kim Alvefur <zash@zash.se>
parents: 11567
diff changeset
   717
			"Process management:",
a3d48204ec95 prosodyctl: Reorganize help / command list
Kim Alvefur <zash@zash.se>
parents: 11567
diff changeset
   718
				"start"; "stop"; "restart"; "reload"; "status";
11695
a6c18f434d7b prosodyctl: Add 'shell' to command listing
Kim Alvefur <zash@zash.se>
parents: 11694
diff changeset
   719
				"shell",
12106
949c2b52f51e prosodyctl: Reorder help sections
Kim Alvefur <zash@zash.se>
parents: 11888
diff changeset
   720
			"User management:",
949c2b52f51e prosodyctl: Reorder help sections
Kim Alvefur <zash@zash.se>
parents: 11888
diff changeset
   721
				"adduser"; "passwd"; "deluser";
949c2b52f51e prosodyctl: Reorder help sections
Kim Alvefur <zash@zash.se>
parents: 11888
diff changeset
   722
			"Plugin management:",
949c2b52f51e prosodyctl: Reorder help sections
Kim Alvefur <zash@zash.se>
parents: 11888
diff changeset
   723
				"install"; "remove"; "list";
11586
a3d48204ec95 prosodyctl: Reorganize help / command list
Kim Alvefur <zash@zash.se>
parents: 11567
diff changeset
   724
			"Informative:",
a3d48204ec95 prosodyctl: Reorganize help / command list
Kim Alvefur <zash@zash.se>
parents: 11567
diff changeset
   725
				"about",
11694
4e36a1e7222b prosodyctl: Add 'check' to command listing (fixes #1622)
Kim Alvefur <zash@zash.se>
parents: 11591
diff changeset
   726
				"check",
11696
d1e7f5b2f524 prosodyctl: Add cert to command listing
Kim Alvefur <zash@zash.se>
parents: 11695
diff changeset
   727
			"Other:",
d1e7f5b2f524 prosodyctl: Add cert to command listing
Kim Alvefur <zash@zash.se>
parents: 11695
diff changeset
   728
				"cert",
11586
a3d48204ec95 prosodyctl: Reorganize help / command list
Kim Alvefur <zash@zash.se>
parents: 11567
diff changeset
   729
		};
11694
4e36a1e7222b prosodyctl: Add 'check' to command listing (fixes #1622)
Kim Alvefur <zash@zash.se>
parents: 11591
diff changeset
   730
		-- These live in util.prosodyctl.$command so we have their short help here.
4e36a1e7222b prosodyctl: Add 'check' to command listing (fixes #1622)
Kim Alvefur <zash@zash.se>
parents: 11591
diff changeset
   731
		local external_commands = {
11696
d1e7f5b2f524 prosodyctl: Add cert to command listing
Kim Alvefur <zash@zash.se>
parents: 11695
diff changeset
   732
			cert = "Certificate management commands",
11694
4e36a1e7222b prosodyctl: Add 'check' to command listing (fixes #1622)
Kim Alvefur <zash@zash.se>
parents: 11591
diff changeset
   733
			check = "Perform basic checks on your Prosody installation",
11695
a6c18f434d7b prosodyctl: Add 'shell' to command listing
Kim Alvefur <zash@zash.se>
parents: 11694
diff changeset
   734
			shell = "Interact with a running Prosody",
11694
4e36a1e7222b prosodyctl: Add 'check' to command listing (fixes #1622)
Kim Alvefur <zash@zash.se>
parents: 11591
diff changeset
   735
		}
8655
03bb534593cb prosodyctl: Run commands inside async context
Matthew Wild <mwild1@gmail.com>
parents: 8638
diff changeset
   736
03bb534593cb prosodyctl: Run commands inside async context
Matthew Wild <mwild1@gmail.com>
parents: 8638
diff changeset
   737
		local done = {};
03bb534593cb prosodyctl: Run commands inside async context
Matthew Wild <mwild1@gmail.com>
parents: 8638
diff changeset
   738
12107
fc297128c33a prosodyctl: Hide process management commands when init system should be used instead
Kim Alvefur <zash@zash.se>
parents: 12106
diff changeset
   739
		if prosody.installed and has_init_system() then
fc297128c33a prosodyctl: Hide process management commands when init system should be used instead
Kim Alvefur <zash@zash.se>
parents: 12106
diff changeset
   740
			-- Hide start, stop, restart
fc297128c33a prosodyctl: Hide process management commands when init system should be used instead
Kim Alvefur <zash@zash.se>
parents: 12106
diff changeset
   741
			done[table.remove(commands_order, 2)] = true;
fc297128c33a prosodyctl: Hide process management commands when init system should be used instead
Kim Alvefur <zash@zash.se>
parents: 12106
diff changeset
   742
			done[table.remove(commands_order, 2)] = true;
fc297128c33a prosodyctl: Hide process management commands when init system should be used instead
Kim Alvefur <zash@zash.se>
parents: 12106
diff changeset
   743
			done[table.remove(commands_order, 2)] = true;
fc297128c33a prosodyctl: Hide process management commands when init system should be used instead
Kim Alvefur <zash@zash.se>
parents: 12106
diff changeset
   744
		end
fc297128c33a prosodyctl: Hide process management commands when init system should be used instead
Kim Alvefur <zash@zash.se>
parents: 12106
diff changeset
   745
8655
03bb534593cb prosodyctl: Run commands inside async context
Matthew Wild <mwild1@gmail.com>
parents: 8638
diff changeset
   746
		for _, command_name in ipairs(commands_order) do
8674
a4899174a894 prosodyctl: Large number of changes to satisfy [luacheck], includes bug fixes
Matthew Wild <mwild1@gmail.com>
parents: 8671
diff changeset
   747
			local command_func = commands[command_name];
a4899174a894 prosodyctl: Large number of changes to satisfy [luacheck], includes bug fixes
Matthew Wild <mwild1@gmail.com>
parents: 8671
diff changeset
   748
			if command_func then
a4899174a894 prosodyctl: Large number of changes to satisfy [luacheck], includes bug fixes
Matthew Wild <mwild1@gmail.com>
parents: 8671
diff changeset
   749
				command_func{ "--help" };
11586
a3d48204ec95 prosodyctl: Reorganize help / command list
Kim Alvefur <zash@zash.se>
parents: 11567
diff changeset
   750
				done[command_name] = true;
11694
4e36a1e7222b prosodyctl: Add 'check' to command listing (fixes #1622)
Kim Alvefur <zash@zash.se>
parents: 11591
diff changeset
   751
			elseif external_commands[command_name] then
4e36a1e7222b prosodyctl: Add 'check' to command listing (fixes #1622)
Kim Alvefur <zash@zash.se>
parents: 11591
diff changeset
   752
				show_usage(command_name, external_commands[command_name]);
4e36a1e7222b prosodyctl: Add 'check' to command listing (fixes #1622)
Kim Alvefur <zash@zash.se>
parents: 11591
diff changeset
   753
				done[command_name] = true;
11586
a3d48204ec95 prosodyctl: Reorganize help / command list
Kim Alvefur <zash@zash.se>
parents: 11567
diff changeset
   754
			else
8655
03bb534593cb prosodyctl: Run commands inside async context
Matthew Wild <mwild1@gmail.com>
parents: 8638
diff changeset
   755
				print""
11586
a3d48204ec95 prosodyctl: Reorganize help / command list
Kim Alvefur <zash@zash.se>
parents: 11567
diff changeset
   756
				print(command_name);
8655
03bb534593cb prosodyctl: Run commands inside async context
Matthew Wild <mwild1@gmail.com>
parents: 8638
diff changeset
   757
			end
03bb534593cb prosodyctl: Run commands inside async context
Matthew Wild <mwild1@gmail.com>
parents: 8638
diff changeset
   758
		end
03bb534593cb prosodyctl: Run commands inside async context
Matthew Wild <mwild1@gmail.com>
parents: 8638
diff changeset
   759
8674
a4899174a894 prosodyctl: Large number of changes to satisfy [luacheck], includes bug fixes
Matthew Wild <mwild1@gmail.com>
parents: 8671
diff changeset
   760
		for command_name, command_func in pairs(commands) do
8655
03bb534593cb prosodyctl: Run commands inside async context
Matthew Wild <mwild1@gmail.com>
parents: 8638
diff changeset
   761
			if not done[command_name] and not hidden_commands:contains(command_name) then
8674
a4899174a894 prosodyctl: Large number of changes to satisfy [luacheck], includes bug fixes
Matthew Wild <mwild1@gmail.com>
parents: 8671
diff changeset
   762
				command_func{ "--help" };
8655
03bb534593cb prosodyctl: Run commands inside async context
Matthew Wild <mwild1@gmail.com>
parents: 8638
diff changeset
   763
				done[command_name] = true;
03bb534593cb prosodyctl: Run commands inside async context
Matthew Wild <mwild1@gmail.com>
parents: 8638
diff changeset
   764
			end
03bb534593cb prosodyctl: Run commands inside async context
Matthew Wild <mwild1@gmail.com>
parents: 8638
diff changeset
   765
		end
03bb534593cb prosodyctl: Run commands inside async context
Matthew Wild <mwild1@gmail.com>
parents: 8638
diff changeset
   766
03bb534593cb prosodyctl: Run commands inside async context
Matthew Wild <mwild1@gmail.com>
parents: 8638
diff changeset
   767
12867
891edd1ebde6 util.startup: Close state on exit to ensure GC finalizers are called
Kim Alvefur <zash@zash.se>
parents: 12456
diff changeset
   768
		os.exit(0, true);
1087
5e9475bec571 prosodyctl, util.prosodyctl: New prosodyctl utility for managing Prosody servers
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   769
	end
7925
2fd20f372cb1 prosodyctl: Trim trailing whitespace
Kim Alvefur <zash@zash.se>
parents: 7923
diff changeset
   770
12867
891edd1ebde6 util.startup: Close state on exit to ensure GC finalizers are called
Kim Alvefur <zash@zash.se>
parents: 12456
diff changeset
   771
	os.exit(commands[command](arg), true);
8655
03bb534593cb prosodyctl: Run commands inside async context
Matthew Wild <mwild1@gmail.com>
parents: 8638
diff changeset
   772
end, watchers);
7925
2fd20f372cb1 prosodyctl: Trim trailing whitespace
Kim Alvefur <zash@zash.se>
parents: 7923
diff changeset
   773
8655
03bb534593cb prosodyctl: Run commands inside async context
Matthew Wild <mwild1@gmail.com>
parents: 8638
diff changeset
   774
command_runner:run(true);