diff --git a/shell/sbean b/shell/sbean index 6b7fd61..18c230e 100755 --- a/shell/sbean +++ b/shell/sbean @@ -4,23 +4,23 @@ _help() { 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 +- 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 -look for ~/.config/sbean/rc for using multiple db " exit } @@ -43,115 +43,64 @@ _install() { _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 [[ -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 "$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/' + if [[ -e "$DBKEY" ]]; then _error "File $DBKEY already exists"; fi + keepassxc-cli db-create -k "$DBKEY" "$DBPATH" } _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 + if [[ -z "$ENTRY" ]]; then _error "entry required"; fi keepassxc-cli add -k "$DBKEY" --no-password "$DBPATH" -p -u "$ENTRY_USER" "$ENTRY" } _get_user() { - _set_default_db + if [[ -z "$ENTRY" ]]; then _error "entry required"; fi keepassxc-cli show -k "$DBKEY" --no-password -a username "$DBPATH" "$ENTRY" } _get_pass() { - _set_default_db + if [[ -z "$ENTRY" ]]; then _error "entry required"; fi 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 + 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 -which keepassxc-cli &> /dev/null || { - echo Missing keepassxc-cli - exit 1 -} +if [[ ! "$CMD" = install ]]; then + which keepassxc-cli &> /dev/null || { + echo Missing keepassxc-cli >/dev/stderr + exit 1 + } +fi case $CMD in install) _install;; - db-create) _create;; - db-ls) _db_ls;; + create) _create;; ls) _ls;; add) _add;; get-user) _get_user;;