Add HostServ: virtual hosts
New HostServ pseudo-service assigns and applies vhosts. A vhost is a typed
Option<Vhost>{host,setter,ts} on the account (VhostSet/VhostDeleted events),
applied to the displayed host on identify and re-applied by ON; OFF restores
the normal host for the session. Operators SET/DEL (applied at once to
online sessions) and LIST; hosts are validated as dot-separated labels.
New SetHost NetAction -> InspIRCd ENCAP <target-sid> CHGHOST <uid> <host>.
This commit is contained in:
parent
540d2f39d1
commit
1227e26b95
17 changed files with 378 additions and 6 deletions
|
|
@ -270,6 +270,11 @@ impl Protocol for InspIrcd {
|
|||
NetAction::QuitUser { uid, reason } => vec![format!(":{} QUIT :{}", uid, reason)],
|
||||
NetAction::ServiceJoin { uid, channel } => vec![format!(":{} IJOIN {}", uid, channel)],
|
||||
NetAction::ServicePart { uid, channel } => vec![format!(":{} PART {}", uid, channel)],
|
||||
// ENCAP the target's server: CHGHOST <uid> <newhost>, to set a vhost.
|
||||
NetAction::SetHost { uid, host } => {
|
||||
let target = uid.get(..3).unwrap_or(uid.as_str());
|
||||
vec![self.from_us(format!("ENCAP {} CHGHOST {} {}", target, uid, host))]
|
||||
}
|
||||
NetAction::ForceNick { uid, nick } => {
|
||||
let now = SystemTime::now().duration_since(UNIX_EPOCH).map(|d| d.as_secs()).unwrap_or(self.ts);
|
||||
vec![self.from_us(format!("SVSNICK {} {} {}", uid, nick, now))]
|
||||
|
|
@ -448,6 +453,13 @@ mod tests {
|
|||
assert!(ev.iter().any(|e| matches!(e, NetEvent::ChannelVoice { uid, voice: true, .. } if uid == "0IRAAAAAD")), "join voice: {ev:?}");
|
||||
}
|
||||
|
||||
// A vhost is set by ENCAP'ing the target's own server with CHGHOST.
|
||||
#[test]
|
||||
fn serializes_set_host() {
|
||||
let lines = proto().serialize(&NetAction::SetHost { uid: "0IRAAAAAB".into(), host: "cool.example".into() });
|
||||
assert_eq!(lines, vec![":42S ENCAP 0IR CHGHOST 0IRAAAAAB cool.example".to_string()]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn parses_ftopic_and_filters_own() {
|
||||
let ev = proto().parse(":0IRAAAAAB FTOPIC #chan 1783845132 1783845140 :Welcome all");
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue