From 2af0a11a439dd71411161d92ea85b7eb017146f0 Mon Sep 17 00:00:00 2001 From: Federico Angelilli Date: Sun, 14 Jan 2024 00:26:43 +0100 Subject: Add initial extension system --- crypt.sh | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/crypt.sh b/crypt.sh index 4b870e7..7ae7bc4 100755 --- a/crypt.sh +++ b/crypt.sh @@ -18,8 +18,10 @@ umask 077 set -o pipefail +# TODO: Is this really needed +shopt -s nullglob + CRYPT_PATH="${CRYPT_PATH:-~/.crypt}" -CRYPT_EXTENSION="${CRYPT_EXTENSION:-$CRYPT_PATH/.extensions}" CRYPT_ARCHIVE="${CRYPT_ARCHIVE:-.crypt.tar.gpg}" # UTILITIES @@ -266,6 +268,15 @@ entries_desc+=( "Directories" ) # Undefined action function none() { echo "$(_color red,bold)No action specified$(_color reset)"; } +load_extensions() { + [[ -d "$CRYPT_PATH/.extensions" && $CLOSED -eq 0 ]] || return + + for f in $CRYPT_PATH/.extensions/*.bash; do + [[ -f "$f.sig" && -n "$CRYPT_SIGNING_KEY" ]] && gpg_verify "$f" + source "$f" + done +} + load_entries() { [[ -d "$CRYPT_PATH" && $CLOSED -eq 0 ]] || return @@ -382,7 +393,7 @@ SHRED="shred -f -z" cmd_info() { [[ $CLOSED -eq 1 ]] && error "You should open the crypt first." - echo "Crypt ($PRETTY_PATH) info" + echo "Crypt info ($PRETTY_PATH)" for ((i = 0; i < ${#entries_name[@]}; i++)); do echo "entry #$i" @@ -399,7 +410,19 @@ cmd_info() { printf "color: '%s%s%s'\n\n" $color "${entries_color[$i]}" $reset done - echo "${#entries_name[@]} entries in $PRETTY_PATH/.entries" + printf "${#entries_name[@]} entries in $PRETTY_PATH/.entries\n\n" + + [[ ! -d "$CRYPT_PATH/.extensions" ]] && echo "Extension directory not found ($PRETTY_PATH/.extensions)" && return + + echo "Extensions" + + local n=0 + for f in $CRYPT_PATH/.extensions/*.bash; do + n=$(( n + 1 )) + printf "%s [%s]\n" "${f#$CRYPT_PATH/.extensions/}" "$([[ -f "$f.sig" ]] && echo "With signature" || echo "No signature")" + done + + printf "\n%s extensions in $PRETTY_PATH/.extensions\n" $n } cmd_init() { @@ -890,7 +913,7 @@ COMMAND="$1" [[ ! -f "$CRYPT_PATH/$CRYPT_ARCHIVE" ]] CLOSED=$? -[[ "$COMMAND" == sign || "$COMMAND" == open || "$COMMAND" == init ]] || load_entries "$CRYPT_PATH/.entries" +[[ "$COMMAND" != sign && "$COMMAND" != init ]] && load_entries "$CRYPT_PATH/.entries" && load_extensions case "$COMMAND" in help|--help) shift; cmd_help "$@" ;; -- cgit v1.2.3