feat(irc): SASL PLAIN login and IRCv3 server-time
Registration now opens with CAP LS 302 (servers without IRCv3 ignore it and register as before). From the offered capabilities (multi-line LS lists included) the client requests server-time and, when the profile enables it, sasl; then AUTHENTICATE PLAIN with the account (defaulting to the nick) and a stored SASL password (irc-sasl-password), base64 in 400-byte chunks, and CAP END on success or failure — failures are shown on the Server tab and the connection carries on (NickServ still works). server-time tags stamp events with the server's clock, so replayed history shows real times. Tested against the fake IRC server: multi-line LS, REQ/ACK, the PLAIN exchange, 903, CAP END, and a tagged message's timestamp.
This commit is contained in:
@@ -812,6 +812,19 @@ impl ProfileEditor {
|
||||
}
|
||||
}
|
||||
});
|
||||
section(ui, "SASL", |ui| {
|
||||
check(ui, "Log In with SASL", &mut c.sasl, "Authenticates during registration (SASL PLAIN), as most networks now expect");
|
||||
if c.sasl {
|
||||
text(ui, "SASL Account", &mut c.sasl_account, "Defaults to your nick");
|
||||
mode(ui, "SASL Password Storage", &mut c.sasl_mode);
|
||||
if c.sasl_mode == SecretMode::Saved {
|
||||
secret(ui, "SASL Password", secrets, SecretKind::IrcSaslPassword, "Leave blank to keep the saved password");
|
||||
}
|
||||
if !c.use_tls && !c.ssh_tunnel {
|
||||
widgets::hint(ui, "Without TLS or an SSH tunnel the password crosses the network in the clear.");
|
||||
}
|
||||
}
|
||||
});
|
||||
section(ui, "NickServ", |ui| {
|
||||
check(ui, "Identify on Connect", &mut c.nick_serv_identify, "");
|
||||
if c.nick_serv_identify {
|
||||
|
||||
Reference in New Issue
Block a user