[pass] [PATCH] generate: optionally edit generated password file

Nathan Wallace nathan at nosuchthingastwo.com
Fri Dec 18 07:38:43 CET 2015


This enables users to generate a password and immediately edit the
password file. This would simplify the process of generating a password
and storing other information in the password file (like username, or
email)
---
 src/password-store.sh         | 15 +++++++++------
 tests/t0010-generate-tests.sh |  8 ++++++++
 2 files changed, 17 insertions(+), 6 deletions(-)

diff --git a/src/password-store.sh b/src/password-store.sh
index d535a74..fb14f44 100755
--- a/src/password-store.sh
+++ b/src/password-store.sh
@@ -234,11 +234,12 @@ cmd_usage() {
 	        overwriting existing password unless forced.
 	    $PROGRAM edit pass-name
 	        Insert a new password or edit an existing password using ${EDITOR:-vi}.
-	    $PROGRAM generate [--no-symbols,-n] [--clip,-c] [--in-place,-i | --force,-f] pass-name pass-length
+	    $PROGRAM generate [--no-symbols,-n] [--clip,-c] [--in-place,-i | --force,-f] [--edit,-e] pass-name pass-length
 	        Generate a new password of pass-length with optionally no symbols.
 	        Optionally put it on the clipboard and clear board after $CLIP_TIME seconds.
 	        Prompt before overwriting existing password unless forced.
 	        Optionally replace only the first line of an existing file with a new password.
+	        Optionally edit the password file using ${EDITOR:-vi}.
 	    $PROGRAM rm [--recursive,-r] [--force,-f] pass-name
 	        Remove existing password or directory, optionally forcefully.
 	    $PROGRAM mv [--force,-f] old-path new-path
@@ -429,8 +430,8 @@ cmd_edit() {
 }
 
 cmd_generate() {
-	local opts clip=0 force=0 symbols="-y" inplace=0
-	opts="$($GETOPT -o ncif -l no-symbols,clip,in-place,force -n "$PROGRAM" -- "$@")"
+	local opts clip=0 force=0 symbols="-y" inplace=0 edit=0
+	opts="$($GETOPT -o ncife -l no-symbols,clip,in-place,force,edit -n "$PROGRAM" -- "$@")"
 	local err=$?
 	eval set -- "$opts"
 	while true; do case $1 in
@@ -438,10 +439,11 @@ cmd_generate() {
 		-c|--clip) clip=1; shift ;;
 		-f|--force) force=1; shift ;;
 		-i|--in-place) inplace=1; shift ;;
+		-e|--edit) edit=1; shift ;;
 		--) shift; break ;;
 	esac done
 
-	[[ $err -ne 0 || $# -ne 2 || ( $force -eq 1 && $inplace -eq 1 ) ]] && die "Usage: $PROGRAM $COMMAND [--no-symbols,-n] [--clip,-c] [--in-place,-i | --force,-f] pass-name pass-length"
+	[[ $err -ne 0 || $# -ne 2 || ( $force -eq 1 && $inplace -eq 1 ) ]] && die "Usage: $PROGRAM $COMMAND [--no-symbols,-n] [--clip,-c] [--in-place,-i | --force,-f] [--edit,-e] pass-name pass-length"
 	local path="$1"
 	local length="$2"
 	check_sneaky_paths "$path"
@@ -469,10 +471,11 @@ cmd_generate() {
 	[[ $inplace -eq 1 ]] && verb="Replace"
 	git_add_file "$passfile" "$verb generated password for ${path}."
 
-	if [[ $clip -eq 0 ]]; then
+	if [[ $clip -eq 0 && $edit -eq 0 ]]; then
 		printf "\e[1m\e[37mThe generated password for \e[4m%s\e[24m is:\e[0m\n\e[1m\e[93m%s\e[0m\n" "$path" "$pass"
 	else
-		clip "$pass" "$path"
+		[[ $edit -eq 1 ]] && cmd_edit "$path"
+		[[ $clip -eq 1 ]] && clip "$pass" "$path"
 	fi
 }
 
diff --git a/tests/t0010-generate-tests.sh b/tests/t0010-generate-tests.sh
index cadb76f..cdda325 100755
--- a/tests/t0010-generate-tests.sh
+++ b/tests/t0010-generate-tests.sh
@@ -16,4 +16,12 @@ test_expect_success 'Test replacement of first line' '
 	[[ $("$PASS" show cred2) == "$(printf "This is a fake password\\npassword\\nwith\\nmany\\nlines\\nin it bla bla")" ]]
 '
 
+test_expect_success 'Test "generate" and edit' '
+	export FAKE_EDITOR_PASSWORD="overwritten" &&
+	export PATH="$TEST_HOME:$PATH"
+	export EDITOR="fake-editor-change-password.sh" &&
+	"$PASS" generate -e cred1 10 &&
+	[[ $("$PASS" show cred1) == "$FAKE_EDITOR_PASSWORD" ]]
+'
+
 test_done
-- 
2.5.0



More information about the Password-Store mailing list