From 120d0d2fdb1118b5ae90284590a0b4650ddf5d18 Mon Sep 17 00:00:00 2001 From: Connor Peet Date: Thu, 16 Mar 2023 15:49:51 -0700 Subject: [PATCH] fix: make tunnel names case-insensitive (#177413) Lowercase them, since Basis internally is case-sensitive. Fixes #177222 --- cli/src/tunnels/dev_tunnels.rs | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/cli/src/tunnels/dev_tunnels.rs b/cli/src/tunnels/dev_tunnels.rs index b5be4400421..d6d0add1a90 100644 --- a/cli/src/tunnels/dev_tunnels.rs +++ b/cli/src/tunnels/dev_tunnels.rs @@ -317,12 +317,13 @@ impl DevTunnels { persisted: PersistedTunnel, name: &str, ) -> Result<(Tunnel, PersistedTunnel), AnyError> { - self.check_is_name_free(name).await?; + let name = name.to_ascii_lowercase(); + self.check_is_name_free(&name).await?; debug!(self.log, "Tunnel name changed, applying updates..."); let (mut full_tunnel, mut persisted, is_new) = self - .get_or_create_tunnel(persisted, Some(name), NO_REQUEST_OPTIONS) + .get_or_create_tunnel(persisted, Some(&name), NO_REQUEST_OPTIONS) .await?; if is_new { return Ok((full_tunnel, persisted)); @@ -337,7 +338,7 @@ impl DevTunnels { ) .map_err(|e| wrap(e, "failed to rename tunnel"))?; - persisted.name = name.to_string(); + persisted.name = name; self.launcher_tunnel.save(Some(persisted.clone()))?; Ok((new_tunnel, persisted)) @@ -384,7 +385,7 @@ impl DevTunnels { let (mut tunnel, persisted) = match self.launcher_tunnel.load() { Some(mut persisted) => { if let Some(name) = preferred_name { - if persisted.name.ne(&name) { + if !persisted.name.eq_ignore_ascii_case(name) { (_, persisted) = self.update_tunnel_name(persisted, name).await?; } } @@ -645,13 +646,13 @@ impl DevTunnels { }; if let Some(machine_name) = preferred_name { - let name = machine_name; - if let Err(e) = is_valid_name(name) { + let name = machine_name.to_ascii_lowercase(); + if let Err(e) = is_valid_name(&name) { info!(self.log, "{} is an invalid name", e); return Err(AnyError::from(wrap(e, "invalid name"))); } - if is_name_free(name) { - return Ok(name.to_owned()); + if is_name_free(&name) { + return Ok(name); } info!( self.log, @@ -662,6 +663,8 @@ impl DevTunnels { let mut placeholder_name = clean_hostname_for_tunnel(&gethostname::gethostname().to_string_lossy()); + placeholder_name.make_ascii_lowercase(); + if !is_name_free(&placeholder_name) { for i in 2.. { let fixed_name = format!("{}{}", placeholder_name, i); @@ -677,11 +680,13 @@ impl DevTunnels { } loop { - let name = prompt_placeholder( + let mut name = prompt_placeholder( "What would you like to call this machine?", &placeholder_name, )?; + name.make_ascii_lowercase(); + if let Err(e) = is_valid_name(&name) { info!(self.log, "{}", e); continue;