diff --git a/Makefile b/Makefile index 679f7fb..aa9725f 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ var_exclude = ZPASS_.* XDG_.* REMOTE_.* DISPLAY CONFIGFILE TMPDIR fct_exclude = _tty_on zpass: src/* - lxsh -o zpass -m --minify-quotes --minify-var --exclude-var "$(var_exclude)" --minify-fct --exclude-fct "$(fct_exclude)" --remove-unused src/main.sh + lxsh -o zpass -M --exclude-var "$(var_exclude)" --exclude-fct "$(fct_exclude)" src/main.sh debug: src/* lxsh -o zpass src/main.sh diff --git a/src/archive.sh b/src/archive.sh index 1c35c9e..69c0548 100644 --- a/src/archive.sh +++ b/src/archive.sh @@ -7,7 +7,7 @@ unpack() { ( set -e cd "$1" - decrypt "$2" | tar -xf - 2>/dev/null + decrypt "$2" | tar -xf - ) } @@ -28,13 +28,10 @@ pack() ) || return $? if [ -n "$ZPASS_REMOTE_ADDR" ] then - [ -z "$ZPASS_PATH" ] && datapath="~/.local/share/zpass" - if [ -n "$ZPASS_SSH_ID" ] - then scp -i "$ZPASS_SSH_ID" "$1/$archive" "$ZPASS_REMOTE_ADDR:$datapath/$ZPASS_FILE$ZPASS_EXTENSION" >/dev/null || return $? - else scp "$1/$archive" "$ZPASS_REMOTE_ADDR:$datapath/$ZPASS_FILE$ZPASS_EXTENSION" >/dev/null || return $? - fi + ret=0 + sftp_upload "$1/$archive" "$datapath/$ZPASS_FILE$ZPASS_EXTENSION" || ret=$? rm -f "$1/$archive" 2>/dev/null - return 0 + return $ret else mv -f "$1/$archive" "$file" fi @@ -89,12 +86,11 @@ create() { return 1 } [ -n "$ZPASS_REMOTE_ADDR" ] && { + ret=0 ssh "$ZPASS_REMOTE_ADDR" "mkdir -p '$datapath'" - if [ -n "$ZPASS_SSH_ID" ] - then scp -i "$ZPASS_SSH_ID" "$file" "$ZPASS_REMOTE_ADDR:$datapath/$ZPASS_FILE$ZPASS_EXTENSION" >/dev/null || return $? - else scp "$file" "$ZPASS_REMOTE_ADDR:$datapath/$ZPASS_FILE$ZPASS_EXTENSION" >/dev/null || return $? - fi + sftp_upload "$file" "$datapath/$ZPASS_FILE$ZPASS_EXTENSION" || ret=$? rm -rf "$file" 2>/dev/null + return $ret } fi return 0 diff --git a/src/crypt.sh b/src/crypt.sh index 92f7f20..d32bf2e 100644 --- a/src/crypt.sh +++ b/src/crypt.sh @@ -8,8 +8,9 @@ encrypt() { # $1 = key , $2 = keyfile to write decrypt_with_key() { - gpg --pinentry-mode loopback --batch --passphrase "$1" -o - -d "$file" 2>/dev/null && ret=$? && [ -n "$2" ] && echo "$1" > "$2" - return $ret + gpg --pinentry-mode loopback --batch --passphrase "$1" -o - -d "$file" 2>/dev/null || return $? + [ -n "$2" ] && echo "$1" > "$2" + return 0 } # $1 = keyfile to write @@ -18,11 +19,7 @@ decrypt() # get remote file [ -n "$ZPASS_REMOTE_ADDR" ] && { file="$TMPDIR/zpass_$(filehash)$ZPASS_EXTENSION" - [ -z "$ZPASS_PATH" ] && datapath="~/.local/share/zpass" - if [ -n "$ZPASS_SSH_ID" ] - then scp -i "$ZPASS_SSH_ID" "$ZPASS_REMOTE_ADDR:$datapath/$ZPASS_FILE$ZPASS_EXTENSION" "$file" >/dev/null || return $? - else scp "$ZPASS_REMOTE_ADDR:$datapath/$ZPASS_FILE$ZPASS_EXTENSION" "$file" >/dev/null || return $? - fi + sftp_download "$datapath/$ZPASS_FILE$ZPASS_EXTENSION" "$file" >/dev/null || return $? } cat "$file" >/dev/null 2>&1 || { echo "File doesn't exist. Use 'zpass create' to create the file" >&2 && return 1; } # no file diff --git a/src/file.sh b/src/file.sh index 00b81d5..832acfd 100644 --- a/src/file.sh +++ b/src/file.sh @@ -1,13 +1,26 @@ #!/bin/sh list_files() { - _cmd_ "cd '$datapath' 2>/dev/null && find . -maxdepth 1 -type f -regex '.*$ZPASS_EXTENSION\$'" | sed "s/$(escape_chars "$ZPASS_EXTENSION")\$//g; s|.*/||g" + if [ -n "$ZPASS_REMOTE_ADDR" ] ; then + echo "$cmd" | sftp_cmd -b- << EOF +cd "$datapath" +ls -1 +EOF + else + ( + cd "$datapath" + ls -1 + ) + fi | grep "$(escape_chars "$ZPASS_EXTENSION")$" } remove_files() { - for N - do - _cmd_ "rm '$datapath/$N$ZPASS_EXTENSION'" || exit $? - done + if [ -n "$ZPASS_REMOTE_ADDR" ] ; then + echo "$cmd" | sftp_cmd -b- << EOF +rm "$datapath/$N$ZPASS_EXTENSION" +EOF + else + rm "$datapath/$N$ZPASS_EXTENSION" + fi } diff --git a/src/main.sh b/src/main.sh index 9ccd1f3..5dcdae7 100644 --- a/src/main.sh +++ b/src/main.sh @@ -27,7 +27,7 @@ case $arg in n|new) sanitize_paths "$@" && new "$@" ;; g|get) sanitize_paths "$@" && get "$@" ;; x|copy) sanitize_paths "$1" && copy "$1" ;; - l|ls|list) sanitize_paths "$@" && __NOPACK=y archive_exec ls -Apw1 -- "$@" ;; + l|ls|list) sanitize_paths "$@" && __NOPACK=y archive_exec ls -Ap1 -- "$@" ;; r|rm) sanitize_paths "$@" && archive_exec rm -rf -- "$@" ;; m|mv) sanitize_paths "$@" && move "$@" ;; e|exec) archive_exec "$@" ;; diff --git a/src/remote.sh b/src/remote.sh new file mode 100644 index 0000000..3e8358b --- /dev/null +++ b/src/remote.sh @@ -0,0 +1,24 @@ +# $@ = args +sftp_cmd() { + [ -n "$ZPASS_REMOTE_ADDR" ] || return $? + if [ -n "$ZPASS_SSH_ID" ] ; then + sftp -i "$ZPASS_SSH_ID" "$@" "$ZPASS_REMOTE_ADDR" + else + sftp "$@" "$ZPASS_REMOTE_ADDR" + fi | grep -v "^sftp>" + return 0 +} + +# $1 = local file , $2 = remote file +sftp_upload() { + sftp_cmd -b- >/dev/null << E +put "$1" "$2" +E +} + +# $1 = remote file , $2 = local file +sftp_download() { + sftp_cmd -b- >/dev/null << E +get "$1" "$2" +E +}