commit ad6a786a4886a716716bfbf137f4003ad63ed2d6
parent 9547bd36873333865e17c4f5715b3f17acc8fc91
Author: Sean Enck <sean@ttypty.com>
Date: Wed, 13 Jul 2022 19:26:32 -0400
deprecates pwgen
Diffstat:
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