mirror of
https://github.com/Microsoft/vscode
synced 2024-08-27 21:09:43 +00:00
cli: fix tunnel names are case sensitive but remoteAuthorities are not (#181347)
Fixes #177222
This commit is contained in:
parent
3b6633daa7
commit
5a139d4ffc
|
@ -274,47 +274,14 @@ impl DevTunnels {
|
|||
|
||||
/// Renames the current tunnel to the new name.
|
||||
pub async fn rename_tunnel(&mut self, name: &str) -> Result<(), AnyError> {
|
||||
is_valid_name(name)?;
|
||||
|
||||
self.check_is_name_free(name).await?;
|
||||
|
||||
let mut tunnel = match self.launcher_tunnel.load() {
|
||||
Some(t) => t,
|
||||
None => {
|
||||
debug!(self.log, "No code server tunnel found, creating new one");
|
||||
let (persisted, _) = self.create_tunnel(name, NO_REQUEST_OPTIONS).await?;
|
||||
self.launcher_tunnel.save(Some(persisted))?;
|
||||
return Ok(());
|
||||
}
|
||||
};
|
||||
|
||||
let locator = tunnel.locator();
|
||||
|
||||
let mut full_tunnel = spanf!(
|
||||
self.log,
|
||||
self.log.span("dev-tunnel.tag.get"),
|
||||
self.client.get_tunnel(&locator, NO_REQUEST_OPTIONS)
|
||||
)
|
||||
.map_err(|e| wrap(e, "failed to lookup original tunnel"))?;
|
||||
|
||||
full_tunnel.tags = vec![name.to_string(), VSCODE_CLI_TUNNEL_TAG.to_string()];
|
||||
spanf!(
|
||||
self.log,
|
||||
self.log.span("dev-tunnel.tag.update"),
|
||||
self.client.update_tunnel(&full_tunnel, NO_REQUEST_OPTIONS)
|
||||
)
|
||||
.map_err(|e| wrap(e, "failed to update tunnel tags"))?;
|
||||
|
||||
tunnel.name = name.to_string();
|
||||
self.launcher_tunnel.save(Some(tunnel.clone()))?;
|
||||
Ok(())
|
||||
self.update_tunnel_name(None, name).await.map(|_| ())
|
||||
}
|
||||
|
||||
/// Updates the name of the existing persisted tunnel to the new name.
|
||||
/// Gracefully creates a new tunnel if the previous one was deleted.
|
||||
async fn update_tunnel_name(
|
||||
&mut self,
|
||||
persisted: PersistedTunnel,
|
||||
persisted: Option<PersistedTunnel>,
|
||||
name: &str,
|
||||
) -> Result<(Tunnel, PersistedTunnel), AnyError> {
|
||||
let name = name.to_ascii_lowercase();
|
||||
|
@ -322,9 +289,17 @@ impl DevTunnels {
|
|||
|
||||
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)
|
||||
.await?;
|
||||
let (mut full_tunnel, mut persisted, is_new) = match persisted {
|
||||
Some(persisted) => {
|
||||
self.get_or_create_tunnel(persisted, Some(&name), NO_REQUEST_OPTIONS)
|
||||
.await
|
||||
}
|
||||
None => self
|
||||
.create_tunnel(&name, NO_REQUEST_OPTIONS)
|
||||
.await
|
||||
.map(|(pt, t)| (t, pt, true)),
|
||||
}?;
|
||||
|
||||
if is_new {
|
||||
return Ok((full_tunnel, persisted));
|
||||
}
|
||||
|
@ -368,7 +343,6 @@ impl DevTunnels {
|
|||
let (persisted, tunnel) = self
|
||||
.create_tunnel(create_with_new_name.unwrap_or(&persisted.name), options)
|
||||
.await?;
|
||||
self.launcher_tunnel.save(Some(persisted.clone()))?;
|
||||
Ok((tunnel, persisted, true))
|
||||
}
|
||||
Err(e) => Err(wrap(e, "failed to lookup tunnel").into()),
|
||||
|
@ -386,8 +360,9 @@ impl DevTunnels {
|
|||
Some(mut persisted) => {
|
||||
if let Some(preferred_name) = preferred_name.map(|n| n.to_ascii_lowercase()) {
|
||||
if persisted.name.to_ascii_lowercase() != preferred_name {
|
||||
(_, persisted) =
|
||||
self.update_tunnel_name(persisted, &preferred_name).await?;
|
||||
(_, persisted) = self
|
||||
.update_tunnel_name(Some(persisted), &preferred_name)
|
||||
.await?;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -404,7 +379,6 @@ impl DevTunnels {
|
|||
let (persisted, full_tunnel) = self
|
||||
.create_tunnel(&name, &HOST_TUNNEL_REQUEST_OPTIONS)
|
||||
.await?;
|
||||
self.launcher_tunnel.save(Some(persisted.clone()))?;
|
||||
(full_tunnel, persisted)
|
||||
}
|
||||
};
|
||||
|
@ -509,14 +483,14 @@ impl DevTunnels {
|
|||
)))
|
||||
}
|
||||
Ok(t) => {
|
||||
return Ok((
|
||||
PersistedTunnel {
|
||||
cluster: t.cluster_id.clone().unwrap(),
|
||||
id: t.tunnel_id.clone().unwrap(),
|
||||
name: name.to_string(),
|
||||
},
|
||||
t,
|
||||
))
|
||||
let pt = PersistedTunnel {
|
||||
cluster: t.cluster_id.clone().unwrap(),
|
||||
id: t.tunnel_id.clone().unwrap(),
|
||||
name: name.to_string(),
|
||||
};
|
||||
|
||||
self.launcher_tunnel.save(Some(pt.clone()))?;
|
||||
return Ok((pt, t));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue