From 3ae262894e6ccb76d38d3a2f2a4c8acfb5ae89a5 Mon Sep 17 00:00:00 2001 From: Hatter Jiang Date: Sun, 26 Oct 2025 09:36:38 +0800 Subject: [PATCH] feat: env --- Cargo.lock | 130 ++++++++++++++++++++++++++++++++++++++++++++++++++++ Cargo.toml | 1 + src/main.rs | 5 +- 3 files changed, 134 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 37d1c92..b416185 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -163,6 +163,27 @@ dependencies = [ "typenum", ] +[[package]] +name = "dirs-next" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" +dependencies = [ + "cfg-if", + "dirs-sys-next", +] + +[[package]] +name = "dirs-sys-next" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + [[package]] name = "either" version = "1.15.0" @@ -252,12 +273,28 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + [[package]] name = "libc" version = "0.2.177" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" +[[package]] +name = "libredox" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" +dependencies = [ + "bitflags", + "libc", +] + [[package]] name = "linux-raw-sys" version = "0.4.15" @@ -340,6 +377,7 @@ dependencies = [ "pinentry", "rand", "rpassword", + "rust_util", "secrecy", "serde", "serde_json", @@ -416,6 +454,17 @@ dependencies = [ "getrandom", ] +[[package]] +name = "redox_users" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" +dependencies = [ + "getrandom", + "libredox", + "thiserror", +] + [[package]] name = "rpassword" version = "7.4.0" @@ -437,6 +486,18 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "rust_util" +version = "0.6.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01736dfb1c97fec6b874d4939aac6db3b748c61cfd62183c7b80c4f1db003635" +dependencies = [ + "lazy_static", + "libc", + "term", + "term_size", +] + [[package]] name = "rustix" version = "0.38.44" @@ -450,6 +511,12 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "rustversion" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" + [[package]] name = "ryu" version = "1.0.20" @@ -531,6 +598,47 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "term" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f" +dependencies = [ + "dirs-next", + "rustversion", + "winapi", +] + +[[package]] +name = "term_size" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e4129646ca0ed8f45d09b929036bafad5377103edd06e50bf574b353d2b08d9" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "typenum" version = "1.19.0" @@ -583,6 +691,28 @@ dependencies = [ "rustix", ] +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + [[package]] name = "windows-link" version = "0.2.1" diff --git a/Cargo.toml b/Cargo.toml index 3d5ef08..108b7df 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,6 +10,7 @@ hex = "0.4.3" pinentry = "0.5.0" rand = "0.8.5" rpassword = "7.3.1" +rust_util = "0.6.50" secrecy = "0.8.0" serde = { version = "1.0.203", features = ["serde_derive"] } serde_json = "1.0.118" diff --git a/src/main.rs b/src/main.rs index 060633e..806e98d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,10 +1,11 @@ +use std::fs; use std::process::exit; -use std::{env, fs}; use aes_gcm_stream::Aes256GcmStreamEncryptor; use clap::Parser; use pinentry::PassphraseInput; use rand::random; +use rust_util::util_env; use secrecy::ExposeSecret; use serde::Serialize; @@ -78,7 +79,7 @@ fn main() { fn get_pin_entry(args: &Cli) -> String { args.pin_entry.clone().unwrap_or_else(|| { - if let Ok(pin_entry) = env::var(PIN_ENTRY_ENV) { + if let Some(pin_entry) = util_env::env_var(PIN_ENTRY_ENV) { return pin_entry; } if let Ok(m) = fs::metadata(PIN_ENTRY_1) {