feat: v1.7.6, update denpendencies, fix diaguer ctrl-c do not show cursor
This commit is contained in:
@@ -7,6 +7,7 @@ use std::process::Command;
|
||||
use std::time::{Instant, SystemTime};
|
||||
|
||||
use clap::Args;
|
||||
use dialoguer::console::Term;
|
||||
use dialoguer::Select;
|
||||
use dialoguer::theme::ColorfulTheme;
|
||||
use flate2::Compression;
|
||||
@@ -750,14 +751,17 @@ pub fn select_envelop<'a>(meta: &'a TinyEncryptMeta, key_id: &Option<String>, co
|
||||
let format_envelops = envelops.iter().map(|envelop| {
|
||||
format!("#{}", util_envelop::format_envelop(envelop, config))
|
||||
}).collect::<Vec<_>>();
|
||||
// TODO catch ctrl-c Term::show_cursor()
|
||||
util::register_ctrlc();
|
||||
let select_result = Select::with_theme(&ColorfulTheme::default())
|
||||
.with_prompt("Please select envelop: ")
|
||||
.items(&format_envelops[..])
|
||||
.default(0)
|
||||
.report(false)
|
||||
.report(!silent)
|
||||
.clear(true)
|
||||
.interact();
|
||||
if select_result.is_err() {
|
||||
let _ = Term::stderr().show_cursor();
|
||||
}
|
||||
opt_result!(select_result, "Select envelop error: {}") + 1
|
||||
} else {
|
||||
envelops.iter().enumerate().for_each(|(i, envelop)| {
|
||||
|
||||
36
src/util.rs
36
src/util.rs
@@ -1,9 +1,13 @@
|
||||
use std::{fs, io};
|
||||
use std::io::Write;
|
||||
use std::path::{Path, PathBuf};
|
||||
use std::sync::atomic::{AtomicBool, Ordering};
|
||||
|
||||
use base64::Engine;
|
||||
use base64::engine::general_purpose;
|
||||
use dialoguer::Confirm;
|
||||
use dialoguer::console::Term;
|
||||
use dialoguer::theme::ColorfulTheme;
|
||||
use pinentry::PassphraseInput;
|
||||
use rand::random;
|
||||
use rust_util::{information, opt_result, print_ex, simple_error, util_term, warning, XResult};
|
||||
@@ -31,7 +35,7 @@ impl AsRef<[u8]> for SecVec {
|
||||
pub fn read_pin(pin: &Option<String>) -> XResult<String> {
|
||||
let rpin = match pin {
|
||||
Some(pin) => pin.to_string(),
|
||||
None => if !util_env::get_no_default_pin_hint() && util_term::read_yes_no("Use default PIN 123456, please confirm") {
|
||||
None => if is_use_default_pin() {
|
||||
"123456".into()
|
||||
} else {
|
||||
let pin_entry = util_env::get_pin_entry().unwrap_or_else(|| "pinentry".to_string());
|
||||
@@ -51,6 +55,25 @@ pub fn read_pin(pin: &Option<String>) -> XResult<String> {
|
||||
Ok(rpin)
|
||||
}
|
||||
|
||||
pub fn is_use_default_pin() -> bool {
|
||||
if util_env::get_no_default_pin_hint() {
|
||||
return false;
|
||||
}
|
||||
let use_dialoguer = util_env::get_use_dialoguer();
|
||||
if use_dialoguer {
|
||||
register_ctrlc();
|
||||
let confirm_result = Confirm::with_theme(&ColorfulTheme::default())
|
||||
.with_prompt("Use default PIN?")
|
||||
.interact();
|
||||
if confirm_result.is_err() {
|
||||
let _ = Term::stderr().show_cursor();
|
||||
}
|
||||
confirm_result.unwrap_or(false)
|
||||
} else {
|
||||
util_term::read_yes_no("Use default PIN 123456, please confirm")
|
||||
}
|
||||
}
|
||||
|
||||
pub fn remove_file_with_msg(path: &PathBuf) {
|
||||
match fs::remove_file(path) {
|
||||
Err(e) => warning!("Remove file: {} failed: {}", path.display(), e),
|
||||
@@ -264,6 +287,17 @@ pub fn ratio(numerator: u64, denominator: u64) -> String {
|
||||
format!("{:.2}", r as f64 / 100f64)
|
||||
}
|
||||
|
||||
const CTRL_C_SET: AtomicBool = AtomicBool::new(false);
|
||||
|
||||
pub fn register_ctrlc() {
|
||||
if !CTRL_C_SET.load(Ordering::SeqCst) {
|
||||
CTRL_C_SET.store(true, Ordering::SeqCst);
|
||||
let _ = ctrlc::set_handler(move || {
|
||||
// DO NOTHING
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_simple_kdf() {
|
||||
assert_eq!("30edbc354e8cf656adcddbeefbf3f5073372cdc42e4eca2e797bda8abebb6a05",
|
||||
|
||||
Reference in New Issue
Block a user