Hi, i have implementedsomething similar.
https://github.com/d4ndo/pass2gorilla Password gorilla needs some csv file to import password files. You could also print it on paper or whatever. cheers. Am 20.10.2015 um 12:00 schrieb [email protected]: > Send Password-Store mailing list submissions to > [email protected] > > To subscribe or unsubscribe via the World Wide Web, visit > http://lists.zx2c4.com/mailman/listinfo/password-store > or, via email, send a message with subject or body 'help' to > [email protected] > > You can reach the person managing the list at > [email protected] > > When replying, please edit your Subject line so it is more specific > than "Re: Contents of Password-Store digest..." > > > Today's Topics: > > 1. Export command discussion and PATCH (Fredrik Wallgren) > > > ---------------------------------------------------------------------- > > Message: 1 > Date: Tue, 20 Oct 2015 10:34:00 +0200 > From: Fredrik Wallgren <[email protected]> > To: [email protected] > Subject: [pass] Export command discussion and PATCH > Message-ID: <[email protected]> > Content-Type: text/plain; charset="us-ascii"; Format="flowed" > > Hello! > > I'm thinking about migrating my passwords to `pass`, but I found that it was > missing a function I "need", so I implemented it. > > This is ment to be a discussion about the supplied patch, since I'm not sure > it is in mergeable condition. > > * The description in `--help` and `man pass` output should be looked at so it > gets the same feel as other output. > * Only exports three fields, name,password,extra where extra is all multiline > data except the first line. Is more data needed? > * The tests are pretty basic. > > My motivation behind the `export` command is that I would like to have a > plain > text backup (that is stored separately, or even in analog format somewhere > safe). It might be that I'm paranoid (or not enough), but I'm more afraid > that > I would mess up with the GPG-key/password than the possibility of my plain > text export falling in the wrong hands, since I'm not that proficient with > GPG > "yet". > > Description of the `export` command > The command outputs all password in plain text to STDOUT or file if supplied. > The command warns about that it might be a bad idea to export plain text > passwords. > The command warns before overwriting existing file if file output is > requested. > The output is CSV data with three fields name,password,extra and the data is > quoted to support multiline data and names/passwords/extra data with quotes > in > them. > The output contains CSV headers default, but has flag to skip them. > The command contains flags to ignore warnings about existing files and plain > text output. > > What do you think about this addition? > Is it something you think should be in the application? > Have I made any obvious mistakes? (I'm not that used to shell programming.) > Do you have extra functionality you would like to see implemented? > > This is my first email patch, so please tell me if I made some mistake with > it. > > > Adds functionality for exporting passwords as plain text CSV data. > --- > man/pass.1 | 10 ++++++++++ > src/password-store.sh | 45 +++++++++++++++++++++++++++++++++++++++++++++ > tests/t0510-export.sh | 21 +++++++++++++++++++++ > 3 files changed, 76 insertions(+) > create mode 100755 tests/t0510-export.sh > > diff --git a/man/pass.1 b/man/pass.1 > index e1fe605..439fb5b 100644 > --- a/man/pass.1 > +++ b/man/pass.1 > @@ -111,6 +111,13 @@ ensure that temporary files are created in > \fI/dev/shm\fP in order to avoid writ > difficult-to-erase disk sectors. If \fI/dev/shm\fP is not accessible, > fallback to > the ordinary \fITMPDIR\fP location, and print a warning. > .TP > +\fBexport\fP [\fI--no-headers\fP, \fI-n\fP ] [ \fI--verbose\fP, \fI-v\fP ] > [\fI--ignore\fP, \fI-i\fP ] [ \fI--force\fP, \fI-f\fP ] [ \fItarget-file\fP ] > +Exports all passwords in plain text as CSV data. Writes to \fISTDOUT\fP if > \fItarget-file\fP is not supplied. > +Prompt before outputting plain text passwords, unless \fI--ignore\fP or > \fI-i\fP is specified. > +Prompt before overwriting an existing \fItarget-file\fP, unless > \fI--force\fP or \fI-f\fP is specified. > +Outputs name of secrets if \fI--verbose\fP or \fI-v\fP is specified. > +Outputs headers in CSV data, unless \fI--no-headers\fP or \fI-n\fP is > specified. > +.TP > \fBgenerate\fP [ \fI--no-symbols\fP, \fI-n\fP ] [ \fI--clip\fP, \fI-c\fP ] [ > \fI--in-place\fP, \fI-i\fP | \fI--force\fP, \fI-f\fP ] \fIpass-name > pass-length\fP > Generate a new password using > .BR pwgen (1) > @@ -278,6 +285,9 @@ Remove password from store > rm: remove regular file > \[u2018]/home/zx2c4/.password-store/Business/cheese-whiz-factory.gpg\[u2019]? > y > .br > removed > \[u2018]/home/zx2c4/.password-store/Business/cheese-whiz-factory.gpg\[u2019] > +.TP > +Export passwords to CSV file > +.B zx2c4@laptop ~ $ pass export pass-export.csv > > .SH EXTENDED GIT EXAMPLE > Here, we initialize new password store, create a git repository, and then > manipulate and sync passwords. Make note of the arguments to the first call > of \fBpass git push\fP; consult > diff --git a/src/password-store.sh b/src/password-store.sh > index d535a74..e5cab19 100755 > --- a/src/password-store.sh > +++ b/src/password-store.sh > @@ -234,6 +234,14 @@ cmd_usage() { > overwriting existing password unless forced. > $PROGRAM edit pass-name > Insert a new password or edit an existing password using > ${EDITOR:-vi}. > + $PROGRAM export [--no-headers,-n] [--verbose,-v] [--ignore,-i] > [--force,-f] [target-file] > + Exports all passwords in plain text as CSV data to target-file > or > + to STDOUT if no target-file is supplied. > + Outputs a warning prompt that passwords will be written to file > + unencrypted, unless the --ignore flag is present. > + Use the --force flag to force overwrite of target-file. > + The --verbose flag outputs the name of secrets as they are > exported. > + Headers are generated for CSV data, unless the --no-headers > flag is present. > $PROGRAM generate [--no-symbols,-n] [--clip,-c] [--in-place,-i | > --force,-f] 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. > @@ -428,6 +436,42 @@ cmd_edit() { > git_add_file "$passfile" "$action password for $path using > ${EDITOR:-vi}." > } > > +cmd_export() { > + local opts no_headers=0 verbose=0 ignore=0 force=0 > + opts="$($GETOPT -o ifvn -l no-headers,verbose,ignore,force -n > "$PROGRAM" -- "$@")" > + local err=$? > + eval set -- "$opts" > + while true; do case $1 in > + -f|--force) force=1; shift ;; > + -i|--ignore) ignore=1; shift ;; > + -v|--verbose) verbose=1; shift ;; > + -n|--no-headers) no_headers=1; shift ;; > + --) shift; break ;; > + esac done > + > + local outfile="$1" > + [[ $1 && $force -eq 0 && -e $outfile ]] && yesno "File $outfile does > already exist. Overwrite it?" > + [[ $1 ]] && exec 4>$1 || exec 4>&1 > + > + [[ $no_headers -eq 0 ]] && echo "name,password,extra" >&4 > + > + [[ $ignore -eq 0 ]] && yesno "Exporting data will write unencrypted > data to disk. Continue?" > + > + shopt -s nullglob globstar > + for file in "$PREFIX"/**/*.gpg; do > + local filen="${file#$PREFIX/}" > + local name=${filen%.*} > + local contents="$($GPG -d "${GPG_OPTS[@]}" "$file")" > + local pass=$(echo "$contents" | head -n 1) > + local extra=$(echo "$contents" | tail -n +2) > + name=${name//\"/\"\"} > + pass=${pass//\"/\"\"} > + extra=${extra//\"/\"\"} > + [[ $verbose -ne 0 ]] && echo $name > + printf "%s,%s,%s\n" "\"$name\"" "\"$pass\"" "\"$extra\"" >&4 > + done > +} > + > 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" > -- "$@")" > @@ -585,6 +629,7 @@ case "$1" in > grep) shift; cmd_grep "$@" ;; > insert|add) shift; cmd_insert "$@" ;; > edit) shift; cmd_edit "$@" ;; > + export) shift; cmd_export "$@" ;; > generate) shift; cmd_generate "$@" ;; > delete|rm|remove) shift; cmd_delete "$@" ;; > rename|mv) shift; cmd_copy_move "move" "$@" ;; > diff --git a/tests/t0510-export.sh b/tests/t0510-export.sh > new file mode 100755 > index 0000000..aae309f > --- /dev/null > +++ b/tests/t0510-export.sh > @@ -0,0 +1,21 @@ > +#!/usr/bin/env bash > + > +test_description='Test export' > +cd "$(dirname "$0")" > +. ./setup.sh > + > +test_expect_success 'Test "export" command' ' > + "$PASS" init $KEY1 && > + "$PASS" export -i > +' > + > +test_expect_success 'Test "export" output' ' > + [[ $("$PASS" export -i) == name,password,extra ]] > +' > + > +test_expect_success 'Test "export" output with passwords' ' > + "$PASS" insert -e "cred1"<<<"BLAH!!" && > + "$PASS" export -i | grep cred1 > +' > + > +test_done > _______________________________________________ Password-Store mailing list [email protected] http://lists.zx2c4.com/mailman/listinfo/password-store
