101 lines
1.8 KiB
Bash
101 lines
1.8 KiB
Bash
#!/bin/sh
|
|
|
|
# $@ = paths
|
|
_tree()
|
|
{
|
|
if [ $# -gt 0 ]
|
|
then
|
|
fulltree=$(decrypt | tar -tf - 2>/dev/null) || exit $?;
|
|
|
|
for N
|
|
do
|
|
[ $# -gt 1 ] && echo "> $N:"
|
|
echo "$fulltree" | grep "^$(escape_chars "$N")" | sed "s|^$N||g;s|^/||g;/\/$/d;/^$/d"
|
|
done
|
|
|
|
else
|
|
{ decrypt | tar -tf - 2>/dev/null || exit $?; } | sed '/\/$/d ; /^$/d'
|
|
fi
|
|
}
|
|
|
|
# $@ = paths
|
|
get()
|
|
{
|
|
[ $# -lt 1 ] && return 1
|
|
__NOPACK=y archive_exec sh -c '#LXSH_PARSE_MINIFY
|
|
for N
|
|
do
|
|
(
|
|
cat "$N" 2>/dev/null && exit 0
|
|
[ -d "$1" ] && cat "$N/default" 2>/dev/null && exit 0
|
|
exit 1
|
|
) || { echo "$N: not found" >&2 && exit 1; }
|
|
done
|
|
' zpass "$@"
|
|
}
|
|
|
|
# $1 = path
|
|
copy()
|
|
{
|
|
copy_check || return $?
|
|
{ get "$1" || return $?; } | remove_trailing_newline | clipboard && clipboard_clear "$ZPASS_CLIPBOARD_TIME"
|
|
}
|
|
|
|
# $@ = path
|
|
new()
|
|
{
|
|
[ $# -lt 1 ] && return 1
|
|
archive_exec sh -c '#LXSH_PARSE_MINIFY
|
|
len=$1
|
|
rset=$2
|
|
shift 2
|
|
for N
|
|
do
|
|
mkdir -p "$(dirname "$N")" || exit $?
|
|
{ tr -cd "$rset" < /dev/urandom | head -c$len && echo; } > "$N" || exit $?
|
|
done
|
|
' zpass "$ZPASS_RAND_LEN" "$ZPASS_RAND_SET" "$@"
|
|
}
|
|
|
|
# $1 = path , $@ = value
|
|
_set()
|
|
{
|
|
[ $# -lt 1 ] && return 1
|
|
ref=$1
|
|
shift 1
|
|
archive_exec sh -c '#LXSH_PARSE_MINIFY
|
|
mkdir -p "$(dirname "$1")" && printf "%s\n" "$2" > "$1"
|
|
' zpass "$ref" "$*"
|
|
}
|
|
|
|
add()
|
|
{
|
|
[ $# -lt 1 ] && return 1
|
|
archive_exec true # prompt for the key
|
|
for N
|
|
do
|
|
val=$(prompt_password "New value for $N") || return $?
|
|
_set "$N" "$val" || return $?
|
|
done
|
|
}
|
|
|
|
fileset()
|
|
{
|
|
contents=$(cat "$2") || return $?
|
|
_set "$1" "$contents"
|
|
}
|
|
|
|
move()
|
|
{
|
|
[ $# -lt 1 ] && return 1
|
|
archive_exec sh -c '#LXSH_PARSE_MINIFY
|
|
set -e
|
|
for last ; do true ; done
|
|
if [ "$#" -gt 2 ] ; then
|
|
mkdir -p "$last"
|
|
else
|
|
mkdir -p "$(dirname "$last")"
|
|
fi
|
|
mv -f -- "$@"
|
|
' zpass "$@"
|
|
}
|