From 3d8e8d32cdbd6251686065096b11768023bd9994 Mon Sep 17 00:00:00 2001 From: Arlo Siemsen Date: Thu, 17 Aug 2023 13:05:51 -0500 Subject: [PATCH] credential: make gnome-secret built-in as cargo:libsecret --- Cargo.lock | 1 + Cargo.toml | 2 ++ .../cargo-credential-gnome-secret/src/lib.rs | 6 ++++++ .../cargo-credential-gnome-secret/src/main.rs | 7 ------- deny.toml | 1 + src/cargo/util/auth/mod.rs | 1 + src/doc/src/reference/unstable.md | 15 +-------------- 7 files changed, 12 insertions(+), 21 deletions(-) create mode 100644 credential/cargo-credential-gnome-secret/src/lib.rs diff --git a/Cargo.lock b/Cargo.lock index 9976db22c80..63f11dfc9bb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -263,6 +263,7 @@ dependencies = [ "base64", "bytesize", "cargo-credential", + "cargo-credential-gnome-secret", "cargo-credential-macos-keychain", "cargo-credential-wincred", "cargo-platform 0.1.4", diff --git a/Cargo.toml b/Cargo.toml index 9e0a68bc302..4d2d6f6c790 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,6 +20,7 @@ base64 = "0.21.2" bytesize = "1.2" cargo = { path = "" } cargo-credential = { version = "0.3.0", path = "credential/cargo-credential" } +cargo-credential-gnome-secret = { version = "0.3.1", path = "credential/cargo-credential-gnome-secret" } cargo-credential-wincred = { version = "0.3.0", path = "credential/cargo-credential-wincred" } cargo-credential-macos-keychain = { version = "0.3.0", path = "credential/cargo-credential-macos-keychain" } cargo-platform = { path = "crates/cargo-platform", version = "0.1.4" } @@ -123,6 +124,7 @@ base64.workspace = true bytesize.workspace = true cargo-platform.workspace = true cargo-credential.workspace = true +cargo-credential-gnome-secret.workspace = true cargo-credential-macos-keychain.workspace = true cargo-credential-wincred.workspace = true cargo-util.workspace = true diff --git a/credential/cargo-credential-gnome-secret/src/lib.rs b/credential/cargo-credential-gnome-secret/src/lib.rs new file mode 100644 index 00000000000..473e3191daf --- /dev/null +++ b/credential/cargo-credential-gnome-secret/src/lib.rs @@ -0,0 +1,6 @@ +#[cfg(target_os = "linux")] +mod libsecret; +#[cfg(not(target_os = "linux"))] +pub use cargo_credential::UnsupportedCredential as GnomeSecret; +#[cfg(target_os = "linux")] +pub use libsecret::GnomeSecret; diff --git a/credential/cargo-credential-gnome-secret/src/main.rs b/credential/cargo-credential-gnome-secret/src/main.rs index 1d2ecc61fbc..9ba535dcd07 100644 --- a/credential/cargo-credential-gnome-secret/src/main.rs +++ b/credential/cargo-credential-gnome-secret/src/main.rs @@ -1,12 +1,5 @@ //! Cargo registry gnome libsecret credential process. -#[cfg(target_os = "linux")] -mod libsecret; -#[cfg(not(target_os = "linux"))] -use cargo_credential::UnsupportedCredential as GnomeSecret; -#[cfg(target_os = "linux")] -use libsecret::GnomeSecret; - fn main() { cargo_credential::main(GnomeSecret); } diff --git a/deny.toml b/deny.toml index 89d08eacc8f..38364817143 100644 --- a/deny.toml +++ b/deny.toml @@ -109,6 +109,7 @@ allow = [ "MPL-2.0", "Unicode-DFS-2016", "CC0-1.0", + "ISC", ] # List of explicitly disallowed licenses # See https://spdx.org/licenses/ for list of possible licenses diff --git a/src/cargo/util/auth/mod.rs b/src/cargo/util/auth/mod.rs index 10ab4491a92..8ff32f52dea 100644 --- a/src/cargo/util/auth/mod.rs +++ b/src/cargo/util/auth/mod.rs @@ -451,6 +451,7 @@ fn credential_action( "cargo:token-from-stdout" => Box::new(BasicProcessCredential {}), "cargo:wincred" => Box::new(cargo_credential_wincred::WindowsCredential {}), "cargo:macos-keychain" => Box::new(cargo_credential_macos_keychain::MacKeychain {}), + "cargo:libsecret" => Box::new(cargo_credential_gnome_secret::GnomeSecret {}), process => Box::new(CredentialProcessCredential::new(process)), }; config.shell().verbose(|c| { diff --git a/src/doc/src/reference/unstable.md b/src/doc/src/reference/unstable.md index 85aad30c1a0..11b9406baa0 100644 --- a/src/doc/src/reference/unstable.md +++ b/src/doc/src/reference/unstable.md @@ -1094,6 +1094,7 @@ executed within the Cargo process. They are identified with the `cargo:` prefix. * `cargo:token` - Uses Cargo's config and `credentials.toml` to store the token (default). * `cargo:wincred` - Uses the Windows Credential Manager to store the token. * `cargo:macos-keychain` - Uses the macOS Keychain to store the token. +* `cargo:libsecret` - Uses [libsecret](https://wiki.gnome.org/Projects/Libsecret) to store tokens on Linux systems. * `cargo:token-from-stdout ` - Launch a subprocess that returns a token on stdout. Newlines will be trimmed. The process inherits the user's stdin and stderr. It should exit 0 on success, and nonzero on error. @@ -1130,20 +1131,6 @@ In the config, add it to `global-credential-providers`: global-credential-providers = ["cargo-credential-1password"] ``` -A wrapper is available for GNOME -[libsecret](https://wiki.gnome.org/Projects/Libsecret) to store tokens on -Linux systems. Due to build limitations, this wrapper is not available as a -pre-compiled binary. This can be built and installed manually. First, install -libsecret using your system package manager (for example, `sudo apt install -libsecret-1-dev`). Then build and install the wrapper with `cargo install -cargo-credential-gnome-secret`. -In the config, use a path to the binary like this: - -```toml -[registry] -global-credential-providers = ["cargo-credential-gnome-secret"] -``` - #### JSON Interface When using an external credential provider, Cargo communicates with the credential provider using stdin/stdout messages passed as a single line of JSON.