From 3f004c613c426e76131aa483fdcb4136cf9cfb1a Mon Sep 17 00:00:00 2001 From: Arlo Siemsen Date: Wed, 6 Sep 2023 10:10:02 -0500 Subject: [PATCH] fix: improve error for token & provider --- src/cargo/util/auth/mod.rs | 27 ++++++++++++++++----------- tests/testsuite/credential_process.rs | 22 ++++++++++++++++++++-- 2 files changed, 36 insertions(+), 13 deletions(-) diff --git a/src/cargo/util/auth/mod.rs b/src/cargo/util/auth/mod.rs index 4e7ae65a0d8..ae8db442121 100644 --- a/src/cargo/util/auth/mod.rs +++ b/src/cargo/util/auth/mod.rs @@ -108,21 +108,26 @@ fn credential_provider(config: &Config, sid: &SourceId) -> CargoResult { + let provider = resolve_credential_alias(config, provider); if let Some(token) = token { - config.shell().warn(format!( - "{sid} has a token configured in {} that will be ignored \ - because a credential-provider is configured for this registry`", - token.definition - ))?; + if provider[0] != "cargo:token" { + config.shell().warn(format!( + "{sid} has a token configured in {} that will be ignored \ + because this registry is configured to use credential-provider `{}`", + token.definition, provider[0], + ))?; + } } if let Some(secret_key) = secret_key { - config.shell().warn(format!( - "{sid} has a secret-key configured in {} that will be ignored \ - because a credential-provider is configured for this registry`", - secret_key.definition - ))?; + if provider[0] != "cargo:paseto" { + config.shell().warn(format!( + "{sid} has a secret-key configured in {} that will be ignored \ + because this registry is configured to use credential-provider `{}`", + secret_key.definition, provider[0], + ))?; + } } - vec![resolve_credential_alias(config, provider)] + vec![provider] } // Warning for both `token` and `secret-key`, stating which will be ignored diff --git a/tests/testsuite/credential_process.rs b/tests/testsuite/credential_process.rs index 222f6b97835..1bba38800b5 100644 --- a/tests/testsuite/credential_process.rs +++ b/tests/testsuite/credential_process.rs @@ -447,13 +447,31 @@ fn multiple_providers() { #[cargo_test] fn both_token_and_provider() { + let server = registry::RegistryBuilder::new() + .credential_provider(&["cargo:paseto"]) + .build(); + + cargo_process("login -Z credential-process -Z asymmetric-token") + .masquerade_as_nightly_cargo(&["credential-process", "asymmetric-token"]) + .replace_crates_io(server.index_url()) + .with_stderr( + r#"[UPDATING] [..] +[WARNING] registry `crates-io` has a token configured in [..] that will be ignored because this registry is configured to use credential-provider `cargo:paseto` +k3.public[..] +"#, + ) + .run(); +} + +#[cargo_test] +fn registry_provider_overrides_global() { let server = registry::RegistryBuilder::new().build(); cargo_util::paths::append( &paths::home().join(".cargo/config"), format!( r#" [registry] - credential-provider = ["cargo:token"] + global-credential-providers = ["should-not-be-called"] "#, ) .as_bytes(), @@ -462,10 +480,10 @@ fn both_token_and_provider() { cargo_process("login -Z credential-process -v abcdefg") .masquerade_as_nightly_cargo(&["credential-process"]) + .env("CARGO_REGISTRY_CREDENTIAL_PROVIDER", "cargo:token") .replace_crates_io(server.index_url()) .with_stderr( r#"[UPDATING] [..] -[WARNING] registry `crates-io` has a token configured in [..]credentials.toml that will be ignored because a credential-provider is configured for this registry` [CREDENTIAL] cargo:token login crates-io [LOGIN] token for `crates-io` saved "#,