From 47752cfc08194680a33cb19338f3342c8d644c5a Mon Sep 17 00:00:00 2001 From: Ville Rantanen Date: Mon, 16 Oct 2023 14:29:11 +0300 Subject: [PATCH] another version of spilling the beans --- bin/sbean | 1 + py-packages/spiller/setup.py | 2 +- shell/sbean | 165 +++++++++++++++++++++++++++++++++++ 3 files changed, 167 insertions(+), 1 deletion(-) create mode 120000 bin/sbean create mode 100755 shell/sbean diff --git a/bin/sbean b/bin/sbean new file mode 120000 index 0000000..4d5849e --- /dev/null +++ b/bin/sbean @@ -0,0 +1 @@ +../shell/sbean \ No newline at end of file diff --git a/py-packages/spiller/setup.py b/py-packages/spiller/setup.py index 0ad80c8..5ae1a47 100644 --- a/py-packages/spiller/setup.py +++ b/py-packages/spiller/setup.py @@ -16,7 +16,7 @@ setup( version=version, description="Very simple password storage, that encrypts with GPG cmdline tool.", author="Ville Rantanen", - author_email="ville.q.rantanen@gmail.com", + author_email="q@six9.net", entry_points={ "console_scripts": [ "spill = spiller.spiller:main", diff --git a/shell/sbean b/shell/sbean new file mode 100755 index 0000000..6b7fd61 --- /dev/null +++ b/shell/sbean @@ -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 + + +