another version of spilling the beans

This commit is contained in:
2023-10-16 14:29:11 +03:00
parent bc2160b6b2
commit 47752cfc08
3 changed files with 167 additions and 1 deletions

1
bin/sbean Symbolic link
View File

@@ -0,0 +1 @@
../shell/sbean

View File

@@ -16,7 +16,7 @@ setup(
version=version, version=version,
description="Very simple password storage, that encrypts with GPG cmdline tool.", description="Very simple password storage, that encrypts with GPG cmdline tool.",
author="Ville Rantanen", author="Ville Rantanen",
author_email="ville.q.rantanen@gmail.com", author_email="q@six9.net",
entry_points={ entry_points={
"console_scripts": [ "console_scripts": [
"spill = spiller.spiller:main", "spill = spiller.spiller:main",

165
shell/sbean Executable file
View File

@@ -0,0 +1,165 @@
#!/bin/bash
_help() {
echo "
sbean: Spilling the beans, a keepassxc cli wrapper
commands:
install apt install keepassxc
db-create create database
--key Path-to-keyfile --db short-name --path Path-to-database.kdbx
Rest of the commands:
--db [name, defaults to first in config]
db-ls list databases
ls list entries
add add new entry
--entry entry-name --user user-name
get-user returns username
--entry entry-name
get-password returns password
--entry entry-name
open open database using cli
openx open database using keepassxc
look for ~/.config/sbean/rc for using multiple db
"
exit
}
_exit() {
clear
exit
}
_error() {
echo "$@" >/dev/stderr
exit 1
}
_install() {
dpkg -l keepassxc && return
sudo apt-get install keepassxc
}
_create() {
echo Creating new database
set -e
if [[ ! -e "$CONFIG" ]]; then
mkdir -p $( dirname "$CONFIG" )
fi
if [[ -z "$DB" ]]; then _error "--db required"; fi
if [[ -z "$KEY" ]]; then _error "--key required"; fi
if [[ -z "$DBPATH" ]]; then _error "--path required"; fi
DB=$( echo $DB | tr -c -d [a-zA-Z0-9-] )
if [[ -e "$DBPATH" ]]; then _error "File $DBPATH already exists"; fi
if [[ -e "$KEY" ]]; then _error "File $KEY already exists"; fi
EXISTINGDB=$( _get_config DB $DB )
if [[ -n "$EXISTINGDB" ]]; then _error "DB $DB already exists"; fi
KEY=$( readlink -m "$KEY" )
DBPATH=$( readlink -m "$DBPATH" )
keepassxc-cli db-create -k "$KEY" "$DBPATH"
_set_config DB "$DB" "$DBPATH"
_set_config KEY "$DB" "$KEY"
echo Created DB $DB >/dev/stderr
}
_db_ls() {
grep ^DB_ "$CONFIG" | sed 's/DB_\([^=]\+\)=\(.*\)/\1: \2/'
}
_ls() {
_set_default_db
echo DB: $DB >/dev/stderr
keepassxc-cli ls -k "$DBKEY" --no-password -R -f "$DBPATH"
}
_add() {
_set_default_db
if [[ -z "$ENTRY" ]]; then _error "--entry required"; fi
if [[ -z "$ENTRY_USER" ]]; then _error "--user required"; fi
echo DB: $DB >/dev/stderr
keepassxc-cli add -k "$DBKEY" --no-password "$DBPATH" -p -u "$ENTRY_USER" "$ENTRY"
}
_get_user() {
_set_default_db
keepassxc-cli show -k "$DBKEY" --no-password -a username "$DBPATH" "$ENTRY"
}
_get_pass() {
_set_default_db
keepassxc-cli show -k "$DBKEY" --no-password -a password "$DBPATH" "$ENTRY"
}
_open() {
_set_default_db
echo DB: $DB
keepassxc-cli open -k "$DBKEY" --no-password "$DBPATH"
}
_openx() {
_set_default_db
echo DB: $DB
keepassxc --keyfile "$DBKEY" "$DBPATH"
}
_set_config() {
echo "$1"_"$2"=$3 >> "$CONFIG"
}
_set_default_db() {
if [[ -z "$DB" ]]; then
DB=$( grep ^DB_ "$CONFIG" | sed 's/DB_\([^=]\+\)=\(.*\)/\1/' | head -n 1 )
fi
DBPATH=$( _get_config DB "$DB" )
DBKEY=$( _get_config KEY "$DB" )
}
_get_config() {
if [[ ! -e "$CONFIG" ]]; then
return
fi
grep ^"$1"_"$2"= "$CONFIG" | sed 's/[^=]*=//'
}
CONFIG=$HOME/.config/sbean/rc
for (( i=1; i<=$#; i++ )); do
value=${!i}
j=$(( i + 1 ))
[[ "${value}" = "-"* ]] && {
[[ "$value" =~ -h ]] && { _help; }
[[ "$value" =~ --help ]] && { _help; }
[[ "$value" =~ --db ]] && { DB="${!j}"; }
[[ "$value" =~ --key ]] && { KEY="${!j}"; }
[[ "$value" =~ --path ]] && { DBPATH="${!j}"; }
[[ "$value" =~ --entry ]] && { ENTRY="${!j}"; }
[[ "$value" =~ --user ]] && { ENTRY_USER="${!j}"; }
i=$j
continue
}
if [[ -z "$CMD" ]]; then
CMD="$value"
else
_error "Only one command allowed"
fi
done
which keepassxc-cli &> /dev/null || {
echo Missing keepassxc-cli
exit 1
}
case $CMD in
install) _install;;
db-create) _create;;
db-ls) _db_ls;;
ls) _ls;;
add) _add;;
get-user) _get_user;;
get-pass*) _get_pass;;
open) _open;;
openx) _openx;;
*) _help;;
esac