diff options
| -rwxr-xr-x | angou | 41 |
1 files changed, 24 insertions, 17 deletions
| @@ -4,31 +4,39 @@ | |||
| 4 | ANGOU_DIR=${ANGOU_DIR:-"$HOME/.angou/"} | 4 | ANGOU_DIR=${ANGOU_DIR:-"$HOME/.angou/"} |
| 5 | # sets the command to copy into your clipboard (must accept stdin) | 5 | # sets the command to copy into your clipboard (must accept stdin) |
| 6 | ANGOU_CLIPBOARD=${ANGOU_CLIPBOARD:-"xsel -ib"} | 6 | ANGOU_CLIPBOARD=${ANGOU_CLIPBOARD:-"xsel -ib"} |
| 7 | # sets command to use when listing directory structure | ||
| 8 | ANGOU_LIST=${ANGOU_LIST:-"tree"} | ||
| 7 | 9 | ||
| 8 | mkdir -p "$ANGOU_DIR" | 10 | mkdir -p "$ANGOU_DIR" |
| 9 | cd "$ANGOU_DIR" || exit | 11 | cd "$ANGOU_DIR" || exit |
| 10 | 12 | ||
| 11 | # print the directory structure of ANGOU_DIR | 13 | # decrypt and print a password from ANGOU_DIR or print the directory structure |
| 12 | list() { | ||
| 13 | tree "$@" | ||
| 14 | } | ||
| 15 | |||
| 16 | # decrypt and print a password from ANGOU_DIR | ||
| 17 | view() { | 14 | view() { |
| 18 | gpg -qd "${1%%.gpg}".gpg | 15 | if [ -f "${1%%.gpg}" ]; then |
| 16 | gpg -qd "${1%%.gpg}".gpg | ||
| 17 | elif [ -d "${1:-.}" ]; then | ||
| 18 | tree "${1:-.}" | ||
| 19 | else | ||
| 20 | usage | ||
| 21 | exit | ||
| 22 | fi | ||
| 19 | } | 23 | } |
| 20 | 24 | ||
| 21 | # copy the first line from view to clipboard | 25 | # copy the first line from view to clipboard |
| 22 | copy() { | 26 | copy() { |
| 27 | [ ! -f "$1" ] && usage && exit | ||
| 28 | |||
| 23 | view "$1" | sed 1q | $ANGOU_CLIPBOARD | 29 | view "$1" | sed 1q | $ANGOU_CLIPBOARD |
| 24 | } | 30 | } |
| 25 | 31 | ||
| 26 | # create new or existing password in ANGOU_DIR | 32 | # create new or existing password in ANGOU_DIR |
| 27 | edit() { | 33 | edit() { |
| 34 | [ -d "$1" ] && usage && exit | ||
| 35 | |||
| 28 | tmpfile="$(mktemp)" | 36 | tmpfile="$(mktemp)" |
| 29 | 37 | ||
| 30 | # edit a copy of a password if it already exists | 38 | # edit a copy of a password if it already exists |
| 31 | test [ -f "${1**.gpg}".gpg] && cp "$1" "$tmpfile" | 39 | [ -f "${1%%.gpg}".gpg ] && cp "$1" "$tmpfile" |
| 32 | 40 | ||
| 33 | "${VISUAL:-${EDITOR:-ed}}" "$tmpfile" | 41 | "${VISUAL:-${EDITOR:-ed}}" "$tmpfile" |
| 34 | 42 | ||
| @@ -38,22 +46,21 @@ edit() { | |||
| 38 | 46 | ||
| 39 | # print usage | 47 | # print usage |
| 40 | usage() { | 48 | usage() { |
| 41 | printf "Usage: %s [help|view|copy|edit|list [file or directory]]\n" "$1" | 49 | printf "Usage: %s [help|copy|edit|view [file or directory]]\n" "$0" |
| 42 | printf "\tThe view and edit commands expect a file as an argument,\n" | 50 | printf "\tThe edit and copy command expects a file as an argument,\n" |
| 43 | printf "\twhile the list commands expect a directory as an argument.\n" | 51 | printf "\twhile the view command expects a directory as an argument.\n" |
| 44 | printf "\tThe arguments for view, edit, and list are relative to\n" | 52 | printf "\tThe arguments for view and edit are relative to\n" |
| 45 | printf "\t\$ANGOU_DIR which is currently set to %s\n\n" "$ANGOU_DIR" | 53 | printf "\t\$ANGOU_DIR which is currently set to %s\n\n" "$ANGOU_DIR" |
| 46 | 54 | ||
| 47 | printf "\tThe list command is the default option if only a file or\n" | 55 | printf "\tThe view command is the default command if only a file or\n" |
| 48 | printf "\tdirectory is passed as an argument\n" | 56 | printf "\tdirectory is passed as an argument\n" |
| 49 | } | 57 | } |
| 50 | 58 | ||
| 51 | option="$1" | 59 | option="$1" |
| 52 | case "$option" in | 60 | case "$option" in |
| 53 | help) usage "$0" ;; | 61 | help) usage ;; |
| 54 | view) view "$2" ;; | ||
| 55 | copy) copy "$2" ;; | 62 | copy) copy "$2" ;; |
| 56 | edit) edit "$2" ;; | 63 | edit) edit "$2" ;; |
| 57 | list) shift && list "$@" ;; # fallthrough isn't in posix sh? | 64 | view) view "$2" ;; |
| 58 | *) list "$@" ;; | 65 | *) view "$1" ;; |
| 59 | esac | 66 | esac |
