Software /
code /
prosody
Comparison
prosodyctl @ 4142:caa78589598f
prosodyctl, util.prosodyctl: Move UI functions to util.prosodyctl so they can be used outside of prosodyctl itself
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Sun, 13 Feb 2011 19:28:29 +0000 |
parent | 4095:6ad7ed619d37 |
child | 4158:14581c3f33bd |
comparison
equal
deleted
inserted
replaced
4141:ef94984c44a0 | 4142:caa78589598f |
---|---|
224 | 224 |
225 require "util.prosodyctl" | 225 require "util.prosodyctl" |
226 require "socket" | 226 require "socket" |
227 ----------------------- | 227 ----------------------- |
228 | 228 |
229 function show_message(msg, ...) | 229 local show_message, show_warning = prosodyctl.show_message, prosodyctl.show_warning; |
230 print(msg:format(...)); | 230 local show_usage = prosodyctl.show_usage; |
231 end | 231 local getchar, getpass = prosodyctl.getchar, prosodyctl.getpass; |
232 | 232 local show_yesno = prosodyctl.show_yesno; |
233 function show_warning(msg, ...) | 233 local read_password = prosodyctl.read_password; |
234 print(msg:format(...)); | |
235 end | |
236 | |
237 function show_usage(usage, desc) | |
238 print("Usage: "..arg[0].." "..usage); | |
239 if desc then | |
240 print(" "..desc); | |
241 end | |
242 end | |
243 | |
244 local function getchar(n) | |
245 local stty_ret = os.execute("stty raw -echo 2>/dev/null"); | |
246 local ok, char; | |
247 if stty_ret == 0 then | |
248 ok, char = pcall(io.read, n or 1); | |
249 os.execute("stty sane"); | |
250 else | |
251 ok, char = pcall(io.read, "*l"); | |
252 if ok then | |
253 char = char:sub(1, n or 1); | |
254 end | |
255 end | |
256 if ok then | |
257 return char; | |
258 end | |
259 end | |
260 | |
261 local function getpass() | |
262 local stty_ret = os.execute("stty -echo 2>/dev/null"); | |
263 if stty_ret ~= 0 then | |
264 io.write("\027[08m"); -- ANSI 'hidden' text attribute | |
265 end | |
266 local ok, pass = pcall(io.read, "*l"); | |
267 if stty_ret == 0 then | |
268 os.execute("stty sane"); | |
269 else | |
270 io.write("\027[00m"); | |
271 end | |
272 io.write("\n"); | |
273 if ok then | |
274 return pass; | |
275 end | |
276 end | |
277 | |
278 function show_yesno(prompt) | |
279 io.write(prompt, " "); | |
280 local choice = getchar():lower(); | |
281 io.write("\n"); | |
282 if not choice:match("%a") then | |
283 choice = prompt:match("%[.-(%U).-%]$"); | |
284 if not choice then return nil; end | |
285 end | |
286 return (choice == "y"); | |
287 end | |
288 | |
289 local function read_password() | |
290 local password; | |
291 while true do | |
292 io.write("Enter new password: "); | |
293 password = getpass(); | |
294 if not password then | |
295 show_message("No password - cancelled"); | |
296 return; | |
297 end | |
298 io.write("Retype new password: "); | |
299 if getpass() ~= password then | |
300 if not show_yesno [=[Passwords did not match, try again? [Y/n]]=] then | |
301 return; | |
302 end | |
303 else | |
304 break; | |
305 end | |
306 end | |
307 return password; | |
308 end | |
309 | 234 |
310 local prosodyctl_timeout = (config.get("*", "core", "prosodyctl_timeout") or 5) * 2; | 235 local prosodyctl_timeout = (config.get("*", "core", "prosodyctl_timeout") or 5) * 2; |
311 ----------------------- | 236 ----------------------- |
312 local commands = {}; | 237 local commands = {}; |
313 local command = arg[1]; | 238 local command = arg[1]; |