Skip to content

Commit

Permalink
Do not error for auth-required: true without -Z sparse-registry
Browse files Browse the repository at this point in the history
  • Loading branch information
arlosi committed Jan 31, 2023
1 parent 0de0e80 commit f1dadb6
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 18 deletions.
22 changes: 11 additions & 11 deletions src/cargo/sources/registry/http_remote.rs
Original file line number Diff line number Diff line change
Expand Up @@ -334,13 +334,6 @@ impl<'cfg> HttpRegistry<'cfg> {
}
}

fn check_registry_auth_unstable(&self) -> CargoResult<()> {
if self.auth_required && !self.config.cli_unstable().registry_auth {
anyhow::bail!("authenticated registries require `-Z registry-auth`");
}
Ok(())
}

/// Get the cached registry configuration, if it exists.
fn config_cached(&mut self) -> CargoResult<Option<&RegistryConfig>> {
if self.registry_config.is_some() {
Expand Down Expand Up @@ -486,7 +479,9 @@ impl<'cfg> RegistryData for HttpRegistry<'cfg> {
return Poll::Ready(Ok(LoadResponse::NotFound));
}
StatusCode::Unauthorized
if !self.auth_required && path == Path::new("config.json") =>
if !self.auth_required
&& path == Path::new("config.json")
&& self.config.cli_unstable().registry_auth =>
{
debug!("re-attempting request for config.json with authorization included.");
self.fresh.remove(path);
Expand Down Expand Up @@ -542,6 +537,10 @@ impl<'cfg> RegistryData for HttpRegistry<'cfg> {
}
}

if !self.config.cli_unstable().registry_auth {
self.auth_required = false;
}

// Looks like we're going to have to do a network request.
self.start_fetch()?;

Expand Down Expand Up @@ -587,7 +586,6 @@ impl<'cfg> RegistryData for HttpRegistry<'cfg> {
}
}
if self.auth_required {
self.check_registry_auth_unstable()?;
let authorization =
auth::auth_token(self.config, &self.source_id, self.login_url.as_ref(), None)?;
headers.append(&format!("Authorization: {}", authorization))?;
Expand Down Expand Up @@ -660,8 +658,10 @@ impl<'cfg> RegistryData for HttpRegistry<'cfg> {
}

fn config(&mut self) -> Poll<CargoResult<Option<RegistryConfig>>> {
let cfg = ready!(self.config()?).clone();
self.check_registry_auth_unstable()?;
let mut cfg = ready!(self.config()?).clone();
if !self.config.cli_unstable().registry_auth {
cfg.auth_required = false;
}
Poll::Ready(Ok(Some(cfg)))
}

Expand Down
8 changes: 3 additions & 5 deletions src/cargo/sources/registry/remote.rs
Original file line number Diff line number Diff line change
Expand Up @@ -245,11 +245,9 @@ impl<'cfg> RegistryData for RemoteRegistry<'cfg> {
match ready!(self.load(Path::new(""), Path::new("config.json"), None)?) {
LoadResponse::Data { raw_data, .. } => {
trace!("config loaded");
let cfg: RegistryConfig = serde_json::from_slice(&raw_data)?;
if cfg.auth_required && !self.config.cli_unstable().registry_auth {
return Poll::Ready(Err(anyhow::anyhow!(
"authenticated registries require `-Z registry-auth`"
)));
let mut cfg: RegistryConfig = serde_json::from_slice(&raw_data)?;
if !self.config.cli_unstable().registry_auth {
cfg.auth_required = false;
}
Poll::Ready(Ok(Some(cfg)))
}
Expand Down
18 changes: 16 additions & 2 deletions tests/testsuite/registry_auth.rs
Original file line number Diff line number Diff line change
Expand Up @@ -42,12 +42,26 @@ static SUCCESS_OUTPUT: &'static str = "\

#[cargo_test]
fn requires_nightly() {
let _registry = RegistryBuilder::new().alternative().auth_required().build();
let _registry = RegistryBuilder::new()
.alternative()
.auth_required()
.http_api()
.build();

let p = make_project();
p.cargo("build")
.with_status(101)
.with_stderr_contains(" authenticated registries require `-Z registry-auth`")
.with_stderr(
r#"[UPDATING] `alternative` index
[DOWNLOADING] crates ...
error: failed to download from `[..]/dl/bar/0.0.1/download`
Caused by:
failed to get successful HTTP response from `[..]`, got 401
body:
Unauthorized message from server.
"#,
)
.run();
}

Expand Down

0 comments on commit f1dadb6

Please sign in to comment.