Software /
code /
clix
Comparison
clix.lua @ 165:e4391832be1e
clix: Read password from stdin if not available
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Wed, 03 Aug 2022 03:01:26 +0200 |
parent | 131:58d485001448 |
child | 166:b0c586241224 |
comparison
equal
deleted
inserted
replaced
164:fafdcde2e2eb | 165:e4391832be1e |
---|---|
50 accounts[current_account or "default"][k] = v; | 50 accounts[current_account or "default"][k] = v; |
51 end | 51 end |
52 end | 52 end |
53 end | 53 end |
54 | 54 |
55 local function read_password() | |
56 io.write("Password: ") | |
57 local stty_ret = os.execute("stty -echo 2>/dev/null"); | |
58 if stty_ret ~= 0 then | |
59 io.write("\027[08m"); -- ANSI 'hidden' text attribute | |
60 end | |
61 local ok, pass = pcall(io.read, "*l"); | |
62 if stty_ret == 0 then | |
63 os.execute("stty sane"); | |
64 else | |
65 io.write("\027[00m"); | |
66 end | |
67 io.write("\n"); | |
68 if ok then return pass; end | |
69 end | |
70 | |
55 function clix_connect(opts, on_connect, plugins) | 71 function clix_connect(opts, on_connect, plugins) |
56 local account = accounts[opts.account or "default"]; | 72 local account = accounts[opts.account or "default"]; |
57 if not (account and account.jid) then | 73 if not (account and account.jid) then |
58 io.stderr:write("The specified account (", opts.account or "default", ") wasn't found in the config file\n"); | 74 io.stderr:write("The specified account (", opts.account or "default", ") wasn't found in the config file\n"); |
59 return nil; | 75 return nil; |
92 verse.quit(); | 108 verse.quit(); |
93 end); | 109 end); |
94 -- Optional config parameters | 110 -- Optional config parameters |
95 conn.connect_host = account.address; | 111 conn.connect_host = account.address; |
96 conn.connect_port = account.port; | 112 conn.connect_port = account.port; |
113 | |
114 if not account.password and opts.interactive then | |
115 account.password = read_password() | |
116 end | |
97 | 117 |
98 -- Connect! | 118 -- Connect! |
99 conn:connect_client(account.jid, opts.password or account.password); | 119 conn:connect_client(account.jid, account.password); |
100 | 120 |
101 -- COMPAT: Tigase discards stanzas sent at the same time as </stream:stream> | 121 -- COMPAT: Tigase discards stanzas sent at the same time as </stream:stream> |
102 local _real_close = conn.close; | 122 local _real_close = conn.close; |
103 function conn:close() | 123 function conn:close() |
104 conn:debug("Delaying close..."); | 124 conn:debug("Delaying close..."); |