Added a welcome message when typing pm and added some ascii art
This commit is contained in:
parent
4b8d4eb0c6
commit
62caefcd22
9 changed files with 95 additions and 5 deletions
11
linux-mac-install.sh
Executable file
11
linux-mac-install.sh
Executable file
|
|
@ -0,0 +1,11 @@
|
|||
#!/bin/bash
|
||||
BINARY="pm"
|
||||
|
||||
if [ -f "./$BINARY" ]; then
|
||||
echo "Installing $BINARY to /usr/local/bin..."
|
||||
sudo cp "./$BINARY" /usr/local/bin/
|
||||
sudo chmod +x /usr/local/bin/$BINARY
|
||||
echo "Done! You can now use 'pm' from any terminal."
|
||||
else
|
||||
echo "Error: Binary '$BINARY' not found. Make sure you are in the folder with the downloaded file."
|
||||
fi
|
||||
5
linux-mac-uninstall.sh
Executable file
5
linux-mac-uninstall.sh
Executable file
|
|
@ -0,0 +1,5 @@
|
|||
#!/bin/bash
|
||||
echo "Removing pm binary and encrypted data..."
|
||||
sudo rm -f /usr/local/bin/pm
|
||||
rm -rf ~/.my_pass_manager
|
||||
echo "Uninstalled successfully."
|
||||
Binary file not shown.
BIN
pm-windows.zip
BIN
pm-windows.zip
Binary file not shown.
24
release.sh
Executable file
24
release.sh
Executable file
|
|
@ -0,0 +1,24 @@
|
|||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
echo "Starting build process..."
|
||||
|
||||
echo "Cleaning up old builds..."
|
||||
rm -f pm-linux-mac.tar.gz pm-windows.zip
|
||||
|
||||
cargo build --release
|
||||
|
||||
cargo build --release --target x86_64-pc-windows-gnu
|
||||
|
||||
echo "Packaging Linux..."
|
||||
mkdir -p pm-linux-mac
|
||||
cp target/release/pm linux-mac-install.sh linux-mac-uninstall.sh pm-linux-mac/
|
||||
tar -czvf pm-linux-mac.tar.gz pm-linux-mac/
|
||||
|
||||
echo "Packaging Windows..."
|
||||
mkdir -p pm-windows
|
||||
cp target/x86_64-pc-windows-gnu/release/pm.exe windows-install.ps1 windows-uninstall.ps1 pm-windows/
|
||||
zip -r pm-windows.zip pm-windows/
|
||||
|
||||
rm -rf pm-linux-mac pm-windows
|
||||
echo "Done! Upload pm-linux-mac.tar.gz and pm-windows.zip to GitHub."
|
||||
13
src/args.rs
13
src/args.rs
|
|
@ -3,9 +3,20 @@ use clap::{Args, Parser, Subcommand};
|
|||
#[derive(Parser)]
|
||||
#[command(name = "PassManager")]
|
||||
#[command(about = " A simple password manager CLI", long_about = None)]
|
||||
#[command(before_help = r#"
|
||||
████████ █████████████ _~^~^~_
|
||||
▒▒███▒▒███▒▒███▒▒███▒▒███ \) / o o \ (/
|
||||
▒███ ▒███ ▒███ ▒███ ▒███ '_ - _'
|
||||
▒███ ▒███ ▒███ ▒███ ▒███ / '-----' \
|
||||
▒███████ █████▒███ █████
|
||||
▒███▒▒▒ ▒▒▒▒▒ ▒▒▒ ▒▒▒▒▒
|
||||
▒███
|
||||
█████
|
||||
▒▒▒▒▒
|
||||
"#)]
|
||||
pub struct Cli {
|
||||
#[command(subcommand)]
|
||||
pub command: Commands,
|
||||
pub command: Option<Commands>,
|
||||
}
|
||||
|
||||
#[derive(Subcommand)]
|
||||
|
|
|
|||
31
src/main.rs
31
src/main.rs
|
|
@ -11,6 +11,13 @@ use zeroize::Zeroize;
|
|||
fn main() {
|
||||
let cli: Cli = Cli::parse();
|
||||
|
||||
if cli.command.is_none() {
|
||||
print_banner();
|
||||
println!("Welcome to pm - The Rust Password Manager");
|
||||
println!("Use 'pm --help' to see available commands.");
|
||||
return;
|
||||
}
|
||||
|
||||
let home_str = std::env::var("HOME")
|
||||
.or_else(|_| std::env::var("USERPROFILE"))
|
||||
.expect("Could not find home directory");
|
||||
|
|
@ -76,7 +83,7 @@ fn main() {
|
|||
let mut passwords = storage::load_passwords(file_str, &encryption_key);
|
||||
|
||||
match &cli.command {
|
||||
Commands::Add(args) => {
|
||||
Some(Commands::Add(args)) => {
|
||||
print!("Enter password for {} : ", args.name);
|
||||
std::io::stdout().flush().expect("Flush failed");
|
||||
let mut p1 = read_password().expect("Failed to read password");
|
||||
|
|
@ -95,14 +102,14 @@ fn main() {
|
|||
p1.zeroize();
|
||||
p2.zeroize();
|
||||
}
|
||||
Commands::Get(args) => match passwords.get(&args.name) {
|
||||
Some(Commands::Get(args)) => match passwords.get(&args.name) {
|
||||
Some(pw) => println!("Password for {} : {}", args.name, pw),
|
||||
None => println!("No password found for '{}'", args.name),
|
||||
},
|
||||
Commands::Delete(args) => {
|
||||
Some(Commands::Delete(args)) => {
|
||||
storage::delete_password(file_str, &args.name, &encryption_key);
|
||||
}
|
||||
Commands::List => {
|
||||
Some(Commands::List) => {
|
||||
if passwords.is_empty() {
|
||||
println!("No passwords saved yet!");
|
||||
} else {
|
||||
|
|
@ -113,6 +120,7 @@ fn main() {
|
|||
println!("-----------------------");
|
||||
}
|
||||
}
|
||||
None => unreachable!(),
|
||||
}
|
||||
|
||||
encryption_key.zeroize();
|
||||
|
|
@ -121,3 +129,18 @@ fn main() {
|
|||
v.zeroize();
|
||||
}
|
||||
}
|
||||
|
||||
fn print_banner() {
|
||||
let banner = r#"
|
||||
████████ █████████████ _~^~^~_
|
||||
▒▒███▒▒███▒▒███▒▒███▒▒███ \) / o o \ (/
|
||||
▒███ ▒███ ▒███ ▒███ ▒███ '_ - _'
|
||||
▒███ ▒███ ▒███ ▒███ ▒███ / '-----' \
|
||||
▒███████ █████▒███ █████
|
||||
▒███▒▒▒ ▒▒▒▒▒ ▒▒▒ ▒▒▒▒▒
|
||||
▒███
|
||||
█████
|
||||
▒▒▒▒▒
|
||||
"#;
|
||||
println!("{}", banner);
|
||||
}
|
||||
|
|
|
|||
12
windows-install.ps1
Normal file
12
windows-install.ps1
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
$binary = "pm.exe"
|
||||
|
||||
if (Test-Path ".\$binary") {
|
||||
$binDir = "$HOME\.cargo\bin"
|
||||
if (!(Test-Path $binDir)) { New-Item -ItemType Directory -Path $binDir }
|
||||
|
||||
Write-Host "Installing $binary to $binDir..." -ForegroundColor Cyan
|
||||
Copy-Item ".\$binary" "$binDir"
|
||||
Write-Host "Done! Restart your terminal and type 'pm'." -ForegroundColor Green
|
||||
} else {
|
||||
Write-Host "Error: $binary not found in this folder." -ForegroundColor Red
|
||||
}
|
||||
4
windows-uninstall.ps1
Normal file
4
windows-uninstall.ps1
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
Write-Host "Uninstalling pm..." -ForegroundColor Cyan
|
||||
Remove-Item "$HOME\.cargo\bin\pm.exe" -ErrorAction SilentlyContinue
|
||||
Remove-Item "$HOME\.my_pass_manager" -Recurse -Force -ErrorAction SilentlyContinue
|
||||
Write-Host "pm and all encrypted data have been removed." -ForegroundColor Yellow
|
||||
Loading…
Add table
Add a link
Reference in a new issue