Skip to content

Commit c2a1daa

Browse files
committed
print the public key on login
1 parent 83387da commit c2a1daa

File tree

3 files changed

+27
-9
lines changed

3 files changed

+27
-9
lines changed

src/cargo/ops/registry.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ use crate::ops;
3030
use crate::ops::Packages;
3131
use crate::sources::{RegistrySource, SourceConfigMap, CRATES_IO_DOMAIN, CRATES_IO_REGISTRY};
3232
use crate::util::auth::{
33-
check_format_like_paserk_secret, {self, AuthorizationError},
33+
paserk_public_from_paserk_secret, {self, AuthorizationError},
3434
};
3535
use crate::util::config::{Config, SslVersionConfig, SslVersionConfigRange};
3636
use crate::util::errors::CargoResult;
@@ -807,7 +807,7 @@ pub fn registry_login(
807807
let new_token;
808808
if generate_keypair || secret_key_required || key_subject.is_some() {
809809
if !config.cli_unstable().registry_auth {
810-
panic!("-registry_auth required.");
810+
panic!("-Zregistry_auth required.");
811811
}
812812
assert!(token.is_none());
813813
// we are dealing with asymmetric tokens
@@ -839,7 +839,9 @@ pub fn registry_login(
839839
.cloned()
840840
.ok_or_else(|| anyhow!("need a secret_key to set a key_subject"))?;
841841
}
842-
if !check_format_like_paserk_secret(&secret_key) {
842+
if let Some(p) = paserk_public_from_paserk_secret(&secret_key) {
843+
drop_println!(config, "{}", &p);
844+
} else {
843845
bail!("not a validly formated PASERK secret key");
844846
}
845847
new_token = RegistryCredentialConfig::AsymmetricKey((

src/cargo/util/auth.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
use crate::util::{config, config::ConfigKey, CanonicalUrl, CargoResult, Config, IntoUrl};
44
use anyhow::{bail, format_err, Context as _};
55
use cargo_util::ProcessError;
6+
use pasetors::paserk::FormatAsPaserk;
67
use core::fmt;
78
use pasetors::keys::{AsymmetricPublicKey, AsymmetricSecretKey};
89
use serde::Deserialize;
@@ -488,9 +489,12 @@ pub fn login(config: &Config, sid: &SourceId, token: RegistryCredentialConfig) -
488489
Ok(())
489490
}
490491

491-
pub(crate) fn check_format_like_paserk_secret(secret_key: &str) -> bool {
492-
let key: Result<AsymmetricSecretKey<pasetors::version3::V3>, _> = secret_key.try_into();
493-
key.is_ok()
492+
pub(crate) fn paserk_public_from_paserk_secret(secret_key: &str) -> Option<String> {
493+
let secret: AsymmetricSecretKey<pasetors::version3::V3> = secret_key.try_into().ok()?;
494+
let public: AsymmetricPublicKey<pasetors::version3::V3> = (&secret).try_into().ok()?;
495+
let mut paserk_pub_key = String::new();
496+
FormatAsPaserk::fmt(&public, &mut paserk_pub_key).unwrap();
497+
Some(paserk_pub_key)
494498
}
495499

496500
/// Removes the token for the given registry.

tests/testsuite/registry.rs

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1135,7 +1135,11 @@ fn login_with_asymmetric_token_and_subject_on_stdin() {
11351135
cargo_process("login --key-subject=foo --secret-key -v -Z registry-auth")
11361136
.masquerade_as_nightly_cargo(&["registry-auth"])
11371137
.replace_crates_io(registry.index_url())
1138-
.with_stdout("please paste the API secret key below")
1138+
.with_stdout(
1139+
"\
1140+
please paste the API secret key below
1141+
k3.public.AmDwjlyf8jAV3gm5Z7Kz9xAOcsKslt_Vwp5v-emjFzBHLCtcANzTaVEghTNEMj9PkQ",
1142+
)
11391143
.with_stdin("k3.secret.fNYVuMvBgOlljt9TDohnaYLblghqaHoQquVZwgR6X12cBFHZLFsaU3q7X3k1Zn36")
11401144
.run();
11411145
let credentials = fs::read_to_string(&credentials).unwrap();
@@ -1152,7 +1156,11 @@ fn login_with_asymmetric_token_on_stdin() {
11521156
cargo_process("login --secret-key -v -Z registry-auth")
11531157
.masquerade_as_nightly_cargo(&["registry-auth"])
11541158
.replace_crates_io(registry.index_url())
1155-
.with_stdout("please paste the API secret key below")
1159+
.with_stdout(
1160+
"\
1161+
please paste the API secret key below
1162+
k3.public.AmDwjlyf8jAV3gm5Z7Kz9xAOcsKslt_Vwp5v-emjFzBHLCtcANzTaVEghTNEMj9PkQ",
1163+
)
11561164
.with_stdin("k3.secret.fNYVuMvBgOlljt9TDohnaYLblghqaHoQquVZwgR6X12cBFHZLFsaU3q7X3k1Zn36")
11571165
.run();
11581166
let credentials = fs::read_to_string(&credentials).unwrap();
@@ -1175,7 +1183,10 @@ fn login_with_asymmetric_key_subject_without_key() {
11751183
cargo_process("login --secret-key -v -Z registry-auth")
11761184
.masquerade_as_nightly_cargo(&["registry-auth"])
11771185
.replace_crates_io(registry.index_url())
1178-
.with_stdout("please paste the API secret key below")
1186+
.with_stdout(
1187+
"please paste the API secret key below
1188+
k3.public.AmDwjlyf8jAV3gm5Z7Kz9xAOcsKslt_Vwp5v-emjFzBHLCtcANzTaVEghTNEMj9PkQ",
1189+
)
11791190
.with_stdin("k3.secret.fNYVuMvBgOlljt9TDohnaYLblghqaHoQquVZwgR6X12cBFHZLFsaU3q7X3k1Zn36")
11801191
.run();
11811192

@@ -1199,6 +1210,7 @@ fn login_with_generate_asymmetric_token() {
11991210
cargo_process("login --generate-keypair -Z registry-auth")
12001211
.masquerade_as_nightly_cargo(&["registry-auth"])
12011212
.replace_crates_io(registry.index_url())
1213+
.with_stdout("k3.public.[..]")
12021214
.run();
12031215
let credentials = fs::read_to_string(&credentials).unwrap();
12041216
assert!(credentials.contains("secret-key = \"k3.secret."));

0 commit comments

Comments
 (0)