Software /
code /
prosody
Annotate
util/prosodyctl/shell.lua @ 11633:77e38ea34d82
mod_admin_adhoc: Log who performs administrative actions
Goal is to have some accountability for these privileged actions.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sun, 27 Jun 2021 21:56:45 +0200 |
parent | 11522:5bd38d9197e1 |
child | 11890:b9aab1962a2b |
rev | line source |
---|---|
10868
fa06cf7059cd
util.prosodyctl.shell: Use same config option as module for socket path
Kim Alvefur <zash@zash.se>
parents:
10867
diff
changeset
|
1 local config = require "core.configmanager"; |
10858
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2 local server = require "net.server"; |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
3 local st = require "util.stanza"; |
10867
561138169983
util.prosodyctl.shell: Join socket path with current data directory
Kim Alvefur <zash@zash.se>
parents:
10859
diff
changeset
|
4 local path = require "util.paths"; |
10874
98c535531450
util.prosodyctl.shell: Really fix --socket option
Kim Alvefur <zash@zash.se>
parents:
10873
diff
changeset
|
5 local parse_args = require "util.argparse".parse; |
11522
5bd38d9197e1
util.prosodyctl.shell: Fix for different location of unpack in Lua 5.1
Kim Alvefur <zash@zash.se>
parents:
11521
diff
changeset
|
6 local unpack = table.unpack or _G.unpack; |
10858
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
7 |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
8 local have_readline, readline = pcall(require, "readline"); |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
9 |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
10 local adminstream = require "util.adminstream"; |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
11 |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
12 if have_readline then |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
13 readline.set_readline_name("prosody"); |
10877
2b015ef8cd06
util.prosodyctl.shell: Save readline history
Kim Alvefur <zash@zash.se>
parents:
10875
diff
changeset
|
14 readline.set_options({ |
2b015ef8cd06
util.prosodyctl.shell: Save readline history
Kim Alvefur <zash@zash.se>
parents:
10875
diff
changeset
|
15 histfile = path.join(prosody.paths.data, ".shell_history"); |
2b015ef8cd06
util.prosodyctl.shell: Save readline history
Kim Alvefur <zash@zash.se>
parents:
10875
diff
changeset
|
16 ignoredups = true; |
2b015ef8cd06
util.prosodyctl.shell: Save readline history
Kim Alvefur <zash@zash.se>
parents:
10875
diff
changeset
|
17 }); |
10858
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
18 end |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
19 |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
20 local function read_line() |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
21 if have_readline then |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
22 return readline.readline("prosody> "); |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
23 else |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
24 io.write("prosody> "); |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
25 return io.read("*line"); |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
26 end |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
27 end |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
28 |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
29 local function send_line(client, line) |
10859
8de0057b4279
mod_admin_shell, mod_admin_telnet, util.prosodyctl.shell: Separate output from final result
Matthew Wild <mwild1@gmail.com>
parents:
10858
diff
changeset
|
30 client.send(st.stanza("repl-input"):text(line)); |
10858
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
31 end |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
32 |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
33 local function repl(client) |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
34 local line = read_line(); |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
35 if not line or line == "quit" or line == "exit" or line == "bye" then |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
36 if not line then |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
37 print(""); |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
38 end |
10877
2b015ef8cd06
util.prosodyctl.shell: Save readline history
Kim Alvefur <zash@zash.se>
parents:
10875
diff
changeset
|
39 if have_readline then |
2b015ef8cd06
util.prosodyctl.shell: Save readline history
Kim Alvefur <zash@zash.se>
parents:
10875
diff
changeset
|
40 readline.save_history(); |
2b015ef8cd06
util.prosodyctl.shell: Save readline history
Kim Alvefur <zash@zash.se>
parents:
10875
diff
changeset
|
41 end |
10858
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
42 os.exit(); |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
43 end |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
44 send_line(client, line); |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
45 end |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
46 |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
47 local function printbanner() |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
48 print([[ |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
49 ____ \ / _ |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
50 | _ \ _ __ ___ ___ _-_ __| |_ _ |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
51 | |_) | '__/ _ \/ __|/ _ \ / _` | | | | |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
52 | __/| | | (_) \__ \ |_| | (_| | |_| | |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
53 |_| |_| \___/|___/\___/ \__,_|\__, | |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
54 A study in simplicity |___/ |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
55 |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
56 ]]); |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
57 print("Welcome to the Prosody administration console. For a list of commands, type: help"); |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
58 print("You may find more help on using this console in our online documentation at "); |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
59 print("https://prosody.im/doc/console\n"); |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
60 end |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
61 |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
62 local function start(arg) --luacheck: ignore 212/arg |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
63 local client = adminstream.client(); |
10938
a5b8ae066688
util.prosodyctl.shell: Collect extra return values
Kim Alvefur <zash@zash.se>
parents:
10937
diff
changeset
|
64 local opts, err, where = parse_args(arg); |
10858
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
65 |
10937
d86f59c31458
util.prosodyctl.shell: Handle argument parsing errors
Kim Alvefur <zash@zash.se>
parents:
10877
diff
changeset
|
66 if not opts then |
d86f59c31458
util.prosodyctl.shell: Handle argument parsing errors
Kim Alvefur <zash@zash.se>
parents:
10877
diff
changeset
|
67 if err == "param-not-found" then |
d86f59c31458
util.prosodyctl.shell: Handle argument parsing errors
Kim Alvefur <zash@zash.se>
parents:
10877
diff
changeset
|
68 print("Unknown command-line option: "..tostring(where)); |
d86f59c31458
util.prosodyctl.shell: Handle argument parsing errors
Kim Alvefur <zash@zash.se>
parents:
10877
diff
changeset
|
69 elseif err == "missing-value" then |
d86f59c31458
util.prosodyctl.shell: Handle argument parsing errors
Kim Alvefur <zash@zash.se>
parents:
10877
diff
changeset
|
70 print("Expected a value to follow command-line option: "..where); |
d86f59c31458
util.prosodyctl.shell: Handle argument parsing errors
Kim Alvefur <zash@zash.se>
parents:
10877
diff
changeset
|
71 end |
d86f59c31458
util.prosodyctl.shell: Handle argument parsing errors
Kim Alvefur <zash@zash.se>
parents:
10877
diff
changeset
|
72 os.exit(1); |
d86f59c31458
util.prosodyctl.shell: Handle argument parsing errors
Kim Alvefur <zash@zash.se>
parents:
10877
diff
changeset
|
73 end |
d86f59c31458
util.prosodyctl.shell: Handle argument parsing errors
Kim Alvefur <zash@zash.se>
parents:
10877
diff
changeset
|
74 |
11423
0a10bb3b129b
util.prosodyctl.shell: Allow passing a single command as argument
Kim Alvefur <zash@zash.se>
parents:
11422
diff
changeset
|
75 if arg[1] then |
0a10bb3b129b
util.prosodyctl.shell: Allow passing a single command as argument
Kim Alvefur <zash@zash.se>
parents:
11422
diff
changeset
|
76 if arg[2] then |
11520
0a464a6e88c4
util.prosodyctl.shell: Allow calling console commands with fewer shell quotes
Kim Alvefur <zash@zash.se>
parents:
11423
diff
changeset
|
77 -- prosodyctl shell module reload foo bar.com --> module:reload("foo", "bar.com") |
11521
16caf35f031f
util.prosodyctl.shell: Fix for missing 'sep' arg to string.rep in Lua 5.1
Kim Alvefur <zash@zash.se>
parents:
11520
diff
changeset
|
78 -- COMPAT Lua 5.1 doesn't have the separator argument to string.rep |
11522
5bd38d9197e1
util.prosodyctl.shell: Fix for different location of unpack in Lua 5.1
Kim Alvefur <zash@zash.se>
parents:
11521
diff
changeset
|
79 arg[1] = string.format("%s:%s("..string.rep("%q, ", #arg-2):sub(1, -3)..")", unpack(arg)); |
11423
0a10bb3b129b
util.prosodyctl.shell: Allow passing a single command as argument
Kim Alvefur <zash@zash.se>
parents:
11422
diff
changeset
|
80 end |
0a10bb3b129b
util.prosodyctl.shell: Allow passing a single command as argument
Kim Alvefur <zash@zash.se>
parents:
11422
diff
changeset
|
81 |
0a10bb3b129b
util.prosodyctl.shell: Allow passing a single command as argument
Kim Alvefur <zash@zash.se>
parents:
11422
diff
changeset
|
82 client.events.add_handler("connected", function() |
0a10bb3b129b
util.prosodyctl.shell: Allow passing a single command as argument
Kim Alvefur <zash@zash.se>
parents:
11422
diff
changeset
|
83 client.send(st.stanza("repl-input"):text(arg[1])); |
0a10bb3b129b
util.prosodyctl.shell: Allow passing a single command as argument
Kim Alvefur <zash@zash.se>
parents:
11422
diff
changeset
|
84 return true; |
0a10bb3b129b
util.prosodyctl.shell: Allow passing a single command as argument
Kim Alvefur <zash@zash.se>
parents:
11422
diff
changeset
|
85 end, 1); |
0a10bb3b129b
util.prosodyctl.shell: Allow passing a single command as argument
Kim Alvefur <zash@zash.se>
parents:
11422
diff
changeset
|
86 |
0a10bb3b129b
util.prosodyctl.shell: Allow passing a single command as argument
Kim Alvefur <zash@zash.se>
parents:
11422
diff
changeset
|
87 local errors = 0; -- TODO This is weird, but works for now. |
0a10bb3b129b
util.prosodyctl.shell: Allow passing a single command as argument
Kim Alvefur <zash@zash.se>
parents:
11422
diff
changeset
|
88 client.events.add_handler("received", function(stanza) |
0a10bb3b129b
util.prosodyctl.shell: Allow passing a single command as argument
Kim Alvefur <zash@zash.se>
parents:
11422
diff
changeset
|
89 if stanza.name == "repl-output" or stanza.name == "repl-result" then |
0a10bb3b129b
util.prosodyctl.shell: Allow passing a single command as argument
Kim Alvefur <zash@zash.se>
parents:
11422
diff
changeset
|
90 if stanza.attr.type == "error" then |
0a10bb3b129b
util.prosodyctl.shell: Allow passing a single command as argument
Kim Alvefur <zash@zash.se>
parents:
11422
diff
changeset
|
91 errors = errors + 1; |
0a10bb3b129b
util.prosodyctl.shell: Allow passing a single command as argument
Kim Alvefur <zash@zash.se>
parents:
11422
diff
changeset
|
92 io.stderr:write(stanza:get_text(), "\n"); |
0a10bb3b129b
util.prosodyctl.shell: Allow passing a single command as argument
Kim Alvefur <zash@zash.se>
parents:
11422
diff
changeset
|
93 else |
0a10bb3b129b
util.prosodyctl.shell: Allow passing a single command as argument
Kim Alvefur <zash@zash.se>
parents:
11422
diff
changeset
|
94 print(stanza:get_text()); |
0a10bb3b129b
util.prosodyctl.shell: Allow passing a single command as argument
Kim Alvefur <zash@zash.se>
parents:
11422
diff
changeset
|
95 end |
0a10bb3b129b
util.prosodyctl.shell: Allow passing a single command as argument
Kim Alvefur <zash@zash.se>
parents:
11422
diff
changeset
|
96 end |
0a10bb3b129b
util.prosodyctl.shell: Allow passing a single command as argument
Kim Alvefur <zash@zash.se>
parents:
11422
diff
changeset
|
97 if stanza.name == "repl-result" then |
0a10bb3b129b
util.prosodyctl.shell: Allow passing a single command as argument
Kim Alvefur <zash@zash.se>
parents:
11422
diff
changeset
|
98 os.exit(errors); |
0a10bb3b129b
util.prosodyctl.shell: Allow passing a single command as argument
Kim Alvefur <zash@zash.se>
parents:
11422
diff
changeset
|
99 end |
0a10bb3b129b
util.prosodyctl.shell: Allow passing a single command as argument
Kim Alvefur <zash@zash.se>
parents:
11422
diff
changeset
|
100 return true; |
0a10bb3b129b
util.prosodyctl.shell: Allow passing a single command as argument
Kim Alvefur <zash@zash.se>
parents:
11422
diff
changeset
|
101 end, 1); |
0a10bb3b129b
util.prosodyctl.shell: Allow passing a single command as argument
Kim Alvefur <zash@zash.se>
parents:
11422
diff
changeset
|
102 end |
0a10bb3b129b
util.prosodyctl.shell: Allow passing a single command as argument
Kim Alvefur <zash@zash.se>
parents:
11422
diff
changeset
|
103 |
10858
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
104 client.events.add_handler("connected", function () |
11422
fa5a23d7aabc
util.prosodyctl.shell: Fix check for --quiet
Kim Alvefur <zash@zash.se>
parents:
10938
diff
changeset
|
105 if not opts.quiet then |
10858
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
106 printbanner(); |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
107 end |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
108 repl(client); |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
109 end); |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
110 |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
111 client.events.add_handler("disconnected", function () |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
112 print("--- session closed ---"); |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
113 os.exit(); |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
114 end); |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
115 |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
116 client.events.add_handler("received", function (stanza) |
10859
8de0057b4279
mod_admin_shell, mod_admin_telnet, util.prosodyctl.shell: Separate output from final result
Matthew Wild <mwild1@gmail.com>
parents:
10858
diff
changeset
|
117 if stanza.name == "repl-output" or stanza.name == "repl-result" then |
10858
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
118 local result_prefix = stanza.attr.type == "error" and "!" or "|"; |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
119 print(result_prefix.." "..stanza:get_text()); |
10859
8de0057b4279
mod_admin_shell, mod_admin_telnet, util.prosodyctl.shell: Separate output from final result
Matthew Wild <mwild1@gmail.com>
parents:
10858
diff
changeset
|
120 end |
8de0057b4279
mod_admin_shell, mod_admin_telnet, util.prosodyctl.shell: Separate output from final result
Matthew Wild <mwild1@gmail.com>
parents:
10858
diff
changeset
|
121 if stanza.name == "repl-result" then |
10858
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
122 repl(client); |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
123 end |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
124 end); |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
125 |
10874
98c535531450
util.prosodyctl.shell: Really fix --socket option
Kim Alvefur <zash@zash.se>
parents:
10873
diff
changeset
|
126 local socket_path = path.resolve_relative_path(prosody.paths.data, opts.socket or config.get("*", "admin_socket") or "prosody.sock"); |
10875
09674bbb833f
util.prosodyctl.shell, util.adminstream: Move connection logic into adminstream for easier reuse
Matthew Wild <mwild1@gmail.com>
parents:
10874
diff
changeset
|
127 local conn = adminstream.connection(socket_path, client.listeners); |
10858
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
128 local ok, err = conn:connect(); |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
129 if not ok then |
10875
09674bbb833f
util.prosodyctl.shell, util.adminstream: Move connection logic into adminstream for easier reuse
Matthew Wild <mwild1@gmail.com>
parents:
10874
diff
changeset
|
130 if err == "no unix socket support" then |
09674bbb833f
util.prosodyctl.shell, util.adminstream: Move connection logic into adminstream for easier reuse
Matthew Wild <mwild1@gmail.com>
parents:
10874
diff
changeset
|
131 print("** LuaSocket unix socket support not available or incompatible, ensure your"); |
09674bbb833f
util.prosodyctl.shell, util.adminstream: Move connection logic into adminstream for easier reuse
Matthew Wild <mwild1@gmail.com>
parents:
10874
diff
changeset
|
132 print("** version is up to date."); |
09674bbb833f
util.prosodyctl.shell, util.adminstream: Move connection logic into adminstream for easier reuse
Matthew Wild <mwild1@gmail.com>
parents:
10874
diff
changeset
|
133 else |
09674bbb833f
util.prosodyctl.shell, util.adminstream: Move connection logic into adminstream for easier reuse
Matthew Wild <mwild1@gmail.com>
parents:
10874
diff
changeset
|
134 print("** Unable to connect to server - is it running? Is mod_admin_shell enabled?"); |
09674bbb833f
util.prosodyctl.shell, util.adminstream: Move connection logic into adminstream for easier reuse
Matthew Wild <mwild1@gmail.com>
parents:
10874
diff
changeset
|
135 print("** Connection error: "..err); |
09674bbb833f
util.prosodyctl.shell, util.adminstream: Move connection logic into adminstream for easier reuse
Matthew Wild <mwild1@gmail.com>
parents:
10874
diff
changeset
|
136 end |
10858
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
137 os.exit(1); |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
138 end |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
139 server.loop(); |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
140 end |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
141 |
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
142 return { |
10871
e5dee71d0ebb
prosodyctl+util.prosodyctl.*: Start breaking up the ever-growing prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
10869
diff
changeset
|
143 shell = start; |
10858
efa49d484560
prosodyctl, util.prosodyctl.shell: `prosodyctl shell` - a client to access the prosodyctl admin shell
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
144 }; |