lockbox

password manager
Log | Files | Refs | README | LICENSE

commit ad6a786a4886a716716bfbf137f4003ad63ed2d6
parent 9547bd36873333865e17c4f5715b3f17acc8fc91
Author: Sean Enck <sean@ttypty.com>
Date:   Wed, 13 Jul 2022 19:26:32 -0400

deprecates pwgen

Diffstat:
MREADME.md | 19-------------------
Mcmd/lb-bash/completions.bash | 5+----
Dcmd/lb-pwgen/main.go | 130-------------------------------------------------------------------------------
Mtests/expected.log | 1-
Mtests/run.sh | 4----
5 files changed, 1 insertion(+), 158 deletions(-)

diff --git a/README.md b/README.md @@ -87,25 +87,6 @@ The token can be automatically copied to the clipboard too lb totp -c token ``` -### pwgen - -Generate passwords -``` -lb pwgen -``` - -This _requires_ these additional environment variables -``` -# list of directories which provide a list of word/inputs to pwgen -PWGEN_SOURCE=/directories/:/colondelimited -# the characters allowed via password generation from the SOURCE entries -PWGEN_ALLOWED=abcABC123 -# special characters that will be inserted randomly into passwords -PWGEN_SPECIAL=.,[]{};:^ -# a 'sed' command that will be run against the generated password -PWGEN_SED=s/a/z/g -``` - ## git integration To manage the `.lb` files in a git repository and see _actual_ text diffs and this to a `.gitconfig` diff --git a/cmd/lb-bash/completions.bash b/cmd/lb-bash/completions.bash @@ -18,7 +18,7 @@ _lb() { fi cur=${COMP_WORDS[COMP_CWORD]} if [ "$COMP_CWORD" -eq 1 ]; then - opts="version ls show insert rm rekey totp list pwgen dump find$clip_enabled" + opts="version ls show insert rm rekey totp list dump find$clip_enabled" # shellcheck disable=SC2207 COMPREPLY=( $(compgen -W "$opts" -- "$cur") ) else @@ -36,9 +36,6 @@ _lb() { opts="$opts -c -clip" fi ;; - "pwgen") - opts="-length -transform -special" - ;; "-c" | "show" | "rm" | "clip") opts=$(lb ls) if [ $(_is_clip "${COMP_WORDS[1]}" "") == 1 ]; then diff --git a/cmd/lb-pwgen/main.go b/cmd/lb-pwgen/main.go @@ -1,130 +0,0 @@ -package main - -import ( - "bytes" - "flag" - "fmt" - "io" - "math/rand" - "os" - "os/exec" - "strings" - "time" - - "github.com/enckse/lockbox/internal" -) - -const ( - transformModeSed = "sed" - transformModePick = "pick" - transformModeNone = "none" -) - -func makeChoice() bool { - return rand.Intn(2)%2 == 0 -} - -func main() { - defaultTransform := transformModePick - sedPattern := strings.TrimSpace(os.Getenv("PWGEN_SED")) - if len(sedPattern) > 0 { - defaultTransform = transformModeSed - } - rand.Seed(time.Now().UnixNano()) - length := flag.Int("length", 64, "length of the password to generate") - extras := flag.Bool("special", false, "include special characters") - rawTokens := flag.String("transform", defaultTransform, "pick how to transform words") - flag.Parse() - src := strings.TrimSpace(os.Getenv("PWGEN_SOURCE")) - special := strings.TrimSpace(os.Getenv("PWGEN_SPECIAL")) - transform := *rawTokens - var paths []string - parts := strings.Split(src, ":") - for _, p := range parts { - if internal.PathExists(p) { - info, err := os.Stat(p) - if err != nil { - internal.Die("unable to stat", err) - } - if info.IsDir() { - files, err := os.ReadDir(p) - if err != nil { - internal.Die("failed to read directory", err) - } - var results []string - for _, f := range files { - results = append(results, f.Name()) - } - if len(results) > 0 { - paths = append(paths, results...) - } - } - } - } - if len(paths) == 0 { - internal.Die("no paths found for generation", internal.NewLockboxError("unable to read paths")) - } - result := "" - l := *length - pathOptions := len(paths) - specials := []rune{} - if *extras { - specials = []rune(special) - } - specialChars := len(specials) - for len(result) < l { - if specialChars > 0 && makeChoice() { - subChar := rand.Intn(specialChars) - result += string(specials[subChar]) - } - sub := rand.Intn(pathOptions) - name := paths[sub] - switch transform { - case transformModePick: - newValue := "" - for _, c := range name { - if makeChoice() { - newValue = strings.ToUpper(string(c)) - } else { - newValue = string(c) - } - } - name = newValue - case transformModeSed: - if len(sedPattern) == 0 { - internal.Die("unable to use sed transform without pattern", internal.NewLockboxError("set PWGEN_SED")) - } - cmd := exec.Command("sed", "-e", sedPattern) - stdin, err := cmd.StdinPipe() - if err != nil { - internal.Die("unable to attach stdin to sed", err) - } - var stdout bytes.Buffer - var stderr bytes.Buffer - cmd.Stdout = &stdout - cmd.Stderr = &stderr - if err := cmd.Start(); err != nil { - internal.Die("failed to run sed", err) - } - if _, err := io.WriteString(stdin, name); err != nil { - stdin.Close() - internal.Die("write to stdin failed for sed", err) - } - stdin.Close() - if err := cmd.Wait(); err != nil { - internal.Die("sed failed", err) - } - errors := strings.TrimSpace(stderr.String()) - if len(errors) > 0 { - internal.Die("sed stderr failure", internal.NewLockboxError(errors)) - } - name = strings.TrimSpace(stdout.String()) - case transformModeNone: - break - default: - internal.Die("unknown transform mode", internal.NewLockboxError(transform)) - } - result += name - } - fmt.Println(result[0:l]) -} diff --git a/tests/expected.log b/tests/expected.log @@ -24,7 +24,6 @@ HOOK RAN keys/one keys/one2 keys2/three -uuuuuuuuuu rekeying: /keys/one.lb rekeying: /keys/one2.lb rekeying: /keys2/three.lb diff --git a/tests/run.sh b/tests/run.sh @@ -12,9 +12,6 @@ export LOCKBOX_KEY="plaintextkey" export LOCKBOX_TOTP="totp" export LOCKBOX_INTERACTIVE="no" export LOCKBOX_HOOKDIR="$TESTS/hooks" -export PWGEN_SOURCE="$PWD" -export PWGEN_SPECIAL="u" -export PWGEN_SED="s/[[:alnum:]]/u/g;s/\./u/g" rm -rf $TESTS mkdir -p $LOCKBOX_STORE @@ -41,7 +38,6 @@ _run() { "$BIN/lb" dump -yes '***' echo -e "test3\ntest4" | "$BIN/lb" insert keys2/three "$BIN/lb" ls - "$BIN/lb-pwgen" -special -length 10 "$BIN/lb-rekey" yes 2>/dev/null | "$BIN/lb" rm keys/one echo