fix: make tunnel names case-insensitive (#177413)

Lowercase them, since Basis internally is case-sensitive.

Fixes #177222
This commit is contained in:
Connor Peet 2023-03-16 15:49:51 -07:00 committed by GitHub
parent 268fdba687
commit 120d0d2fdb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -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;