Files
q-tools/shell/sbean
2023-10-17 11:49:18 +03:00

115 lines
2.5 KiB
Bash
Executable File

#!/bin/bash
_help() {
echo "
sbean: Spilling the beans, a keepassxc cli wrapper
commands:
- apt install keepassxc:
install
- create database
[db-file] [key-file] create
- list entries
[db-file] [key-file] ls
- add new entry, password through stdin, or interactive
[db-file] [key-file] add [entry-name] --user user-name
- get user name
[db-file] [key-file] get-user [entry-name]
- get password
[db-file] [key-file] get-password [entry-name]
- open database using cli
[db-file] [key-file] open
- open database using keepassxc:
[db-file] [key-file] openx
"
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 [[ -z "$DBKEY" ]]; then _error "key required"; fi
if [[ -z "$DBPATH" ]]; then _error "db required"; fi
if [[ -e "$DBPATH" ]]; then _error "File $DBPATH already exists"; fi
if [[ -e "$DBKEY" ]]; then _error "File $DBKEY already exists"; fi
keepassxc-cli db-create -k "$DBKEY" "$DBPATH"
}
_ls() {
keepassxc-cli ls -k "$DBKEY" --no-password -R -f "$DBPATH"
}
_add() {
if [[ -z "$ENTRY" ]]; then _error "entry required"; fi
keepassxc-cli add -k "$DBKEY" --no-password "$DBPATH" -p -u "$ENTRY_USER" "$ENTRY"
}
_get_user() {
if [[ -z "$ENTRY" ]]; then _error "entry required"; fi
keepassxc-cli show -k "$DBKEY" --no-password -a username "$DBPATH" "$ENTRY"
}
_get_pass() {
if [[ -z "$ENTRY" ]]; then _error "entry required"; fi
keepassxc-cli show -k "$DBKEY" --no-password -a password "$DBPATH" "$ENTRY"
}
_open() {
keepassxc-cli open -k "$DBKEY" --no-password "$DBPATH"
}
_openx() {
keepassxc --keyfile "$DBKEY" "$DBPATH"
}
for (( i=1; i<=$#; i++ )); do
value=${!i}
j=$(( i + 1 ))
[[ "${value}" = "-"* ]] && {
[[ "$value" =~ -h ]] && { _help; }
[[ "$value" =~ --help ]] && { _help; }
[[ "$value" =~ --user ]] && { ENTRY_USER="${!j}"; }
i=$j
continue
}
if [[ -z "$DBPATH" ]]; then DBPATH="${!i}"; continue; fi
if [[ -z "$DBKEY" ]]; then DBKEY="${!i}"; continue; fi
if [[ -z "$CMD" ]]; then CMD="${!i}"; continue; fi
if [[ -z "$ENTRY" ]]; then ENTRY="${!i}"; continue; fi
done
if [[ ! "$CMD" = install ]]; then
which keepassxc-cli &> /dev/null || {
echo Missing keepassxc-cli >/dev/stderr
exit 1
}
fi
case $CMD in
install) _install;;
create) _create;;
ls) _ls;;
add) _add;;
get-user) _get_user;;
get-pass*) _get_pass;;
open) _open;;
openx) _openx;;
*) _help;;
esac