cap: advertise IRCv3 sts policy (sts_duration/sts_port/sts_preload) for TLS upgrade
This commit is contained in:
parent
4ce500e525
commit
ba9d62b172
1 changed files with 22 additions and 1 deletions
|
|
@ -176,13 +176,34 @@ impl Command for Cap {
|
||||||
u.cap_302 |= cap302;
|
u.cap_302 |= cap302;
|
||||||
}
|
}
|
||||||
let acctreg = crate::modules::account_registration::cap_tokens(s);
|
let acctreg = crate::modules::account_registration::cap_tokens(s);
|
||||||
let payload = Caps::ls_line(
|
let mut payload = Caps::ls_line(
|
||||||
cap302,
|
cap302,
|
||||||
secure,
|
secure,
|
||||||
&acctreg,
|
&acctreg,
|
||||||
crate::modules::multiline::max_bytes(s),
|
crate::modules::multiline::max_bytes(s),
|
||||||
crate::modules::multiline::max_lines(s),
|
crate::modules::multiline::max_lines(s),
|
||||||
);
|
);
|
||||||
|
// STS: advertise the TLS-upgrade policy to 302 clients (opt-in via
|
||||||
|
// sts_duration). On the plaintext port it names sts_port to move to;
|
||||||
|
// on a TLS connection it just pins the duration.
|
||||||
|
let sts_dur = s.conf_num("sts_duration", 0u64);
|
||||||
|
if cap302 && sts_dur > 0 {
|
||||||
|
let preload = if s.conf_bool("sts_preload", false) {
|
||||||
|
",preload"
|
||||||
|
} else {
|
||||||
|
""
|
||||||
|
};
|
||||||
|
if secure {
|
||||||
|
payload.push_str(&format!(" sts=duration={sts_dur}{preload}"));
|
||||||
|
} else {
|
||||||
|
let sts_port = s.conf_num("sts_port", 0u16);
|
||||||
|
if sts_port > 0 {
|
||||||
|
payload.push_str(&format!(
|
||||||
|
" sts=port={sts_port},duration={sts_dur}{preload}"
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
if !cap302 {
|
if !cap302 {
|
||||||
s.send(uid, format!(":{} CAP {who} LS :{payload}", s.name));
|
s.send(uid, format!(":{} CAP {who} LS :{payload}", s.name));
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue