124 lines
3.0 KiB
Bash
Executable File
124 lines
3.0 KiB
Bash
Executable File
#!/bin/bash
|
|
_help() {
|
|
echo "
|
|
sbean: Spilling the beans, a keepassxc cli wrapper
|
|
|
|
syntax:
|
|
[db-file] [key-file] [command] [[entry-name]] [[options]]
|
|
|
|
Commands:
|
|
install apt install keepassxc
|
|
create database create
|
|
ls list entries
|
|
add [entry-name] add new entry, password asked interactively, or use stdin
|
|
options:
|
|
--user optional user-name
|
|
--file use a file as password (may be binary)
|
|
get-user [entry-name] get user name
|
|
get-password [entry-name] get password
|
|
options:
|
|
--decode use if --file was used to add
|
|
open open database using cli
|
|
openx open database using keepassxc
|
|
"
|
|
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
|
|
if [[ -e "$ENTRY_FILE" ]]; then
|
|
cat "$ENTRY_FILE" | base64 -w 0 | keepassxc-cli add -k "$DBKEY" --no-password "$DBPATH" -p -u "$ENTRY_USER" "$ENTRY"
|
|
else
|
|
keepassxc-cli add -k "$DBKEY" --no-password "$DBPATH" -p -u "$ENTRY_USER" "$ENTRY"
|
|
fi
|
|
}
|
|
|
|
_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
|
|
if [[ -z "$ENTRY_DECODE" ]]; then
|
|
keepassxc-cli show -k "$DBKEY" --no-password -a password "$DBPATH" "$ENTRY"
|
|
else
|
|
keepassxc-cli show -k "$DBKEY" --no-password -a password "$DBPATH" "$ENTRY" | base64 -d
|
|
fi
|
|
}
|
|
|
|
_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}"; }
|
|
[[ "$value" =~ --file ]] && { ENTRY_FILE="${!j}"; }
|
|
[[ "$value" =~ --decode ]] && { ENTRY_DECODE="true"; continue; }
|
|
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
|
|
|
|
|
|
|