feat: update keyring.rs
This commit is contained in:
@@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
use clap::{Args, Parser, Subcommand};
|
use clap::{Args, Parser, Subcommand};
|
||||||
use keyring::Entry;
|
use keyring::Entry;
|
||||||
use rust_util::{opt_result, success, XResult};
|
use rust_util::{XResult, opt_result, success};
|
||||||
use std::collections::BTreeMap;
|
use std::collections::BTreeMap;
|
||||||
|
|
||||||
use zeroizing_alloc::ZeroAlloc;
|
use zeroizing_alloc::ZeroAlloc;
|
||||||
@@ -41,10 +41,10 @@ enum Commands {
|
|||||||
|
|
||||||
#[derive(Debug, Args)]
|
#[derive(Debug, Args)]
|
||||||
pub struct CmdSet {
|
pub struct CmdSet {
|
||||||
/// Service
|
/// Service (optional)
|
||||||
#[arg(long, short = 'S')]
|
#[arg(long, short = 'S')]
|
||||||
pub service: String,
|
pub service: Option<String>,
|
||||||
/// User
|
/// User service:user when service is optional
|
||||||
#[arg(long, short = 'U')]
|
#[arg(long, short = 'U')]
|
||||||
pub user: String,
|
pub user: String,
|
||||||
/// Password
|
/// Password
|
||||||
@@ -56,23 +56,52 @@ pub struct CmdSet {
|
|||||||
pub struct CmdGet {
|
pub struct CmdGet {
|
||||||
/// Service
|
/// Service
|
||||||
#[arg(long, short = 'S')]
|
#[arg(long, short = 'S')]
|
||||||
pub service: String,
|
pub service: Option<String>,
|
||||||
/// User
|
/// User service:user when service is optional
|
||||||
#[arg(long, short = 'U')]
|
#[arg(long, short = 'U')]
|
||||||
pub user: String,
|
pub user: String,
|
||||||
// JSON output
|
// JSON output
|
||||||
#[arg(long)]
|
#[arg(long)]
|
||||||
pub json: bool,
|
pub json: bool,
|
||||||
// Raw output
|
// Raw output
|
||||||
#[arg(long)]
|
#[arg(long, short = 'R')]
|
||||||
pub raw: bool,
|
pub raw: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub struct KeyringKey {
|
||||||
|
pub service: String,
|
||||||
|
pub user: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl KeyringKey {
|
||||||
|
fn from(service: &str, user: &str) -> Self {
|
||||||
|
Self {
|
||||||
|
service: service.to_string(),
|
||||||
|
user: user.to_string(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn parse_key(service: &Option<String>, user: &str) -> KeyringKey {
|
||||||
|
match service {
|
||||||
|
Some(service) => KeyringKey::from(service, user),
|
||||||
|
None => {
|
||||||
|
let user_parts = user.split(":").collect::<Vec<_>>();
|
||||||
|
if user_parts.len() != 2 {
|
||||||
|
KeyringKey::from("keyring-service", user)
|
||||||
|
} else {
|
||||||
|
KeyringKey::from(user_parts[0], user_parts[1])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn main() -> XResult<()> {
|
fn main() -> XResult<()> {
|
||||||
let args = ConnectArgs::parse();
|
let args = ConnectArgs::parse();
|
||||||
match args.command {
|
match args.command {
|
||||||
Commands::Set(cmd_set) => {
|
Commands::Set(cmd_set) => {
|
||||||
let entry = Entry::new(&cmd_set.service, &cmd_set.user)?;
|
let keyring_key = KeyringKey::parse_key(&cmd_set.service, &cmd_set.user);
|
||||||
|
let entry = Entry::new(&keyring_key.service, &cmd_set.user)?;
|
||||||
|
|
||||||
let password = match cmd_set.password {
|
let password = match cmd_set.password {
|
||||||
Some(password) => password,
|
Some(password) => password,
|
||||||
@@ -88,12 +117,13 @@ fn main() -> XResult<()> {
|
|||||||
success!("Set password successfully");
|
success!("Set password successfully");
|
||||||
}
|
}
|
||||||
Commands::Get(cmd_get) => {
|
Commands::Get(cmd_get) => {
|
||||||
let entry = Entry::new(&cmd_get.service, &cmd_get.user)?;
|
let keyring_key = KeyringKey::parse_key(&cmd_get.service, &cmd_get.user);
|
||||||
|
let entry = Entry::new(&keyring_key.service, &keyring_key.user)?;
|
||||||
let password = entry.get_password()?;
|
let password = entry.get_password()?;
|
||||||
if cmd_get.json {
|
if cmd_get.json {
|
||||||
let mut result = BTreeMap::new();
|
let mut result = BTreeMap::new();
|
||||||
result.insert("service", cmd_get.service.to_string());
|
result.insert("service", keyring_key.service.to_string());
|
||||||
result.insert("user", cmd_get.user.to_string());
|
result.insert("user", keyring_key.user.to_string());
|
||||||
result.insert("password", password.to_string());
|
result.insert("password", password.to_string());
|
||||||
println!("{}", serde_json::to_string_pretty(&result)?);
|
println!("{}", serde_json::to_string_pretty(&result)?);
|
||||||
} else if cmd_get.raw {
|
} else if cmd_get.raw {
|
||||||
@@ -106,5 +136,5 @@ fn main() -> XResult<()> {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
// @SCRIPT-SIGNATURE-V1: yk-r1.ES256.20251020T000849+08:00.MEQCIFcMEJOSE3+uJTzhAE1C
|
// @SCRIPT-SIGNATURE-V1: yk-r1.ES256.20260102T155433+08:00.MEQCIFYYJ4OI5Q+EArEZGTAV
|
||||||
// nV8sLPXE3E1uspg7Q7uLYzW/AiAFdhpS/8OLK6Ex2alVVHQOAkTnpP57pKLKWnxf+HNbMw==
|
// WGOMtguuDWImfg+qngQopIIHAiAoWXzczFWsvhflIwqnaIX4Le4i8a7N6XQH/mlIrwgMvA==
|
||||||
|
|||||||
@@ -66,11 +66,11 @@
|
|||||||
},
|
},
|
||||||
"keyring.rs": {
|
"keyring.rs": {
|
||||||
"script_name": "keyring.rs",
|
"script_name": "keyring.rs",
|
||||||
"script_length": 3074,
|
"script_length": 4130,
|
||||||
"script_sha256": "7f5e195881b0a3b091e6dc86d01f5f4d16a4be22d729ffa23f3766797523e1ed",
|
"script_sha256": "8993d6c34face72a3f4288328ba5bb543b334858d60bb1421943ed23179cc416",
|
||||||
"script_full_url": "https://git.hatter.ink/rust-scripts/scriptbase/raw/branch/main/keyring-rs/src/main.rs",
|
"script_full_url": "https://git.hatter.ink/rust-scripts/scriptbase/raw/branch/main/keyring-rs/src/main.rs",
|
||||||
"publish_time": 1760858747229,
|
"publish_time": 1760858747229,
|
||||||
"update_time": 1760890167506
|
"update_time": 1767340579217
|
||||||
},
|
},
|
||||||
"makepassword.rs": {
|
"makepassword.rs": {
|
||||||
"script_name": "makepassword.rs",
|
"script_name": "makepassword.rs",
|
||||||
|
|||||||
@@ -36,8 +36,8 @@
|
|||||||
},
|
},
|
||||||
"keyring-rs": {
|
"keyring-rs": {
|
||||||
"script_name": "keyring-rs",
|
"script_name": "keyring-rs",
|
||||||
"script_length": 3074,
|
"script_length": 4130,
|
||||||
"script_sha256": "7f5e195881b0a3b091e6dc86d01f5f4d16a4be22d729ffa23f3766797523e1ed"
|
"script_sha256": "8993d6c34face72a3f4288328ba5bb543b334858d60bb1421943ed23179cc416"
|
||||||
},
|
},
|
||||||
"makepassword-rs": {
|
"makepassword-rs": {
|
||||||
"script_name": "makepassword-rs",
|
"script_name": "makepassword-rs",
|
||||||
|
|||||||
Reference in New Issue
Block a user