#!/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