diff --git a/bash/bashrc/sources/16_keystore b/bash/bashrc/sources/16_keystore index f455aaf..c21a293 100644 --- a/bash/bashrc/sources/16_keystore +++ b/bash/bashrc/sources/16_keystore @@ -12,11 +12,6 @@ if [ $? -ne 0 ]; then return 1 fi -if [ -z `which xxd` ]; then - echo "xxd is required" >&2 - return 1 -fi - _AUTH_DB=$RBASH_HOME/keystore.db _AUTH_SECRET= _KSTORE_DEF_PROP=${_KSTORE_DEF_PROP:-val} @@ -36,8 +31,8 @@ function kstore { search) shift; kstore-search $@ ;; secret) shift; kstore-secret $@ ;; *) - __func_head "add key value [prop, default: $_KSTORE_DEF_PROP]" - __func_help "update key value [prop, default: $_KSTORE_DEF_PROP]" + __func_head "add key value|file|- [prop, default: $_KSTORE_DEF_PROP]" + __func_help "update key value|file|- [prop, default: $_KSTORE_DEF_PROP]" __func_help "get key [prop, default: $_KSTORE_DEF_PROP]" __func_help "list" __func_help "del key" @@ -65,7 +60,7 @@ function kstore-init { CREATE TABLE IF NOT EXISTS store ( key TEXT UNIQUE NOT NULL , prop TEXT NOT NULL - , data BLOB + , data TEXT , PRIMARY KEY( key ASC, prop ASC ) ); ___SQL___ @@ -82,7 +77,13 @@ function kstore-enc { return 1 fi - openssl enc -e -aes-256-cbc -pbkdf2 -k "$_AUTH_SECRET" | xxd -p | tr -d "\n" + if [ "$1" == "-" ]; then + openssl enc -e -aes-256-cbc -pbkdf2 -k "$_AUTH_SECRET" -a -A + elif [ -f "$1" ]; then + openssl enc -e -aes-256-cbc -pbkdf2 -k "$_AUTH_SECRET" -a -A -in "$1" + else + echo -n "$1" | openssl enc -e -aes-256-cbc -pbkdf2 -k "$_AUTH_SECRET" -a -A + fi } function kstore-dec { @@ -91,7 +92,7 @@ function kstore-dec { return 1 fi - openssl enc -d -aes-256-cbc -pbkdf2 -k "$_AUTH_SECRET" + openssl enc -d -aes-256-cbc -pbkdf2 -k "$_AUTH_SECRET" -a -A } function kstore-secret-macos { @@ -162,7 +163,7 @@ function kstore-update { kstore-init || return 1 local _key _val _prop _key=`kstore-quote "$1"` - _val=`echo -n "$2" | kstore-enc` + _val=`kstore-enc "$2"` _val=`kstore-quote "$_val"` _prop=`kstore-quote "${3:-$_KSTORE_DEF_PROP}"` _cond="key = '$_key' AND prop = '$_prop'" @@ -173,12 +174,12 @@ function kstore-add { kstore-init || return 1 local _key _val _prop _key=`kstore-quote "$1"` - _val=`echo -n "$2" | kstore-enc` + _val=`kstore-enc "$2"` _val=`kstore-quote "$_val"` _prop=`kstore-quote "${3:-$_KSTORE_DEF_PROP}"` sqlite3 "$_AUTH_DB" \ "INSERT INTO store ( key, prop, data ) - VALUES( '$_key', '$_prop', X'$_val' );" + VALUES( '$_key', '$_prop', '$_val' );" } function kstore-get { @@ -188,7 +189,12 @@ function kstore-get { _prop=`kstore-quote "${2:-$_KSTORE_DEF_PROP}"` _cond="key = '$_key' AND prop = '$_prop'" - echo -n "`$_SQLITE -list "$_AUTH_DB" "SELECT ( data ) FROM store WHERE $_cond;"`" | kstore-dec + sqlite3 "$_AUTH_DB" "SELECT 1111 FROM store WHERE $_cond;" | grep -q 1111 + if [ $? -eq 0 ]; then + $_SQLITE -list "$_AUTH_DB" "SELECT ( data ) FROM store WHERE $_cond;" | kstore-dec + else + echo "\"$1\" not found" >&2 + fi } function kstore-del { @@ -213,7 +219,7 @@ function kstore-del { echo "action canceled" fi else - echo "$1 not found" + echo "\"$1\" not found" >&2 fi }