lockbox

password manager
Log | Files | Refs | README | LICENSE

commit ab9f9dc5db73cd1ff756ccc2d17c0fc9225a035c
parent 42b46e8fea6e75e486b0dd111692aaf0c53fa378
Author: Sean Enck <sean@ttypty.com>
Date:   Sun, 12 Feb 2023 19:09:11 -0500

docs should all come from the executable

Diffstat:
MMakefile | 8+++-----
Rscripts/doc.sections -> cmd/doc.sections | 0
Mcmd/main.go | 31++++++++++++++++++++++++++++---
Minternal/cli/completions.bash | 3+++
Minternal/cli/core.go | 75+++++++++++++++++++++++++++++++++++++++++----------------------------------
Minternal/cli/core_test.go | 2+-
6 files changed, 76 insertions(+), 43 deletions(-)

diff --git a/Makefile b/Makefile @@ -4,7 +4,6 @@ TARGET := $(BUILD)lb TESTDIR := $(sort $(dir $(wildcard internal/**/*_test.go))) DOC := $(BUILD)doc.text MAN := $(BUILD)lb.man -DOCTEXT := scripts/doc.sections ACTUAL := $(BUILD)actual.log DATE := $(shell date +%Y-%m-%d) RUNS := -keyfile=true -keyfile=false @@ -22,7 +21,7 @@ $(TARGET): cmd/main.go internal/**/*.go go.* internal/cli/completions* $(TESTDIR): cd $@ && go test -check: $(TARGET) $(TESTDIR) $(RUNS) +check: $(TARGET) $(TESTDIR) $(DOC) $(RUNS) $(RUNS): rm -f $(BUILD)*.kdbx @@ -32,9 +31,8 @@ $(RUNS): clean: rm -rf $(BUILD) -$(DOC): $(TARGET) $(DOCTEXT) - @cat $(DOCTEXT) > $(DOC) - $(TARGET) env -defaults >> $(DOC) +$(DOC): $(TARGET) + $(TARGET) help -verbose > $(DOC) $(MAN): $(TARGET) $(DOC) help2man --include $(DOC) -h help -v version -o $(MAN) ./$(TARGET) diff --git a/scripts/doc.sections b/cmd/doc.sections diff --git a/cmd/main.go b/cmd/main.go @@ -17,8 +17,12 @@ import ( "github.com/enckse/lockbox/internal/totp" ) -//go:embed "vers.txt" -var version string +var ( + //go:embed "vers.txt" + version string + //go:embed "doc.sections" + docSection string +) type ( callbackFunction func([]string) error @@ -71,7 +75,28 @@ func getInfoDefault(args []string, possibleArg string) (bool, error) { func processInfoCommands(command string, args []string) ([]string, error) { switch command { case cli.HelpCommand: - return cli.Usage() + if len(args) > 3 { + return nil, errors.New("invalid help command") + } + isAdvanced := false + if len(args) == 3 { + if args[2] == cli.HelpAdvancedCommand { + isAdvanced = true + } else { + return nil, errors.New("invalid help option") + } + } + results, err := cli.Usage() + if err != nil { + return nil, err + } + if isAdvanced { + results = append(results, "") + results = append(results, strings.Split(strings.TrimSpace(docSection), "\n")...) + results = append(results, "") + results = append(results, inputs.ListEnvironmentVariables(false)...) + } + return results, nil case cli.VersionCommand: return []string{fmt.Sprintf("version: %s", version)}, nil case cli.EnvCommand, cli.BashCommand: diff --git a/internal/cli/completions.bash b/internal/cli/completions.bash @@ -15,6 +15,9 @@ _{{ $.Executable }}() { "{{ $.InsertCommand }}") opts="{{ $.InsertMultiCommand }}{{ if $.CanTOTP }} {{ $.InsertTOTPCommand }}{{end}} $({{ $.DoList }})" ;; + "{{ $.HelpCommand }}") + opts="{{ $.HelpAdvancedCommand }}" + ;; "{{ $.MoveCommand }}") opts=$({{ $.DoList }}) ;; diff --git a/internal/cli/core.go b/internal/cli/core.go @@ -38,6 +38,8 @@ const ( VersionCommand = "version" // HelpCommand shows usage HelpCommand = "help" + // HelpAdvancedCommand shows advanced help + HelpAdvancedCommand = "-verbose" // RemoveCommand removes an entry RemoveCommand = "rm" // EnvCommand shows environment information used by lockbox @@ -70,25 +72,27 @@ var bashCompletions string type ( // Completions handles the inputs to completions for templating Completions struct { - Options []string - CanClip bool - CanTOTP bool - ReadOnly bool - InsertCommand string - TOTPShortCommand string - TOTPOnceCommand string - TOTPClipCommand string - InsertMultiCommand string - InsertTOTPCommand string - RemoveCommand string - ClipCommand string - ShowCommand string - MoveCommand string - TOTPCommand string - DoTOTPList string - DoList string - Executable string - StatsCommand string + Options []string + CanClip bool + CanTOTP bool + ReadOnly bool + InsertCommand string + TOTPShortCommand string + TOTPOnceCommand string + TOTPClipCommand string + InsertMultiCommand string + InsertTOTPCommand string + RemoveCommand string + ClipCommand string + ShowCommand string + MoveCommand string + TOTPCommand string + DoTOTPList string + DoList string + Executable string + StatsCommand string + HelpCommand string + HelpAdvancedCommand string } ) @@ -123,21 +127,23 @@ func BashCompletions(defaults bool) ([]string, error) { return nil, err } c := Completions{ - Executable: name, - InsertCommand: InsertCommand, - RemoveCommand: RemoveCommand, - TOTPShortCommand: TOTPShortCommand, - TOTPClipCommand: TOTPClipCommand, - TOTPOnceCommand: TOTPOnceCommand, - ClipCommand: ClipCommand, - ShowCommand: ShowCommand, - StatsCommand: StatsCommand, - InsertMultiCommand: InsertMultiCommand, - InsertTOTPCommand: InsertTOTPCommand, - TOTPCommand: TOTPCommand, - MoveCommand: MoveCommand, - DoList: fmt.Sprintf("%s %s", name, ListCommand), - DoTOTPList: fmt.Sprintf("%s %s %s", name, TOTPCommand, TOTPListCommand), + Executable: name, + InsertCommand: InsertCommand, + RemoveCommand: RemoveCommand, + TOTPShortCommand: TOTPShortCommand, + TOTPClipCommand: TOTPClipCommand, + TOTPOnceCommand: TOTPOnceCommand, + ClipCommand: ClipCommand, + ShowCommand: ShowCommand, + StatsCommand: StatsCommand, + InsertMultiCommand: InsertMultiCommand, + HelpCommand: HelpCommand, + HelpAdvancedCommand: HelpAdvancedCommand, + InsertTOTPCommand: InsertTOTPCommand, + TOTPCommand: TOTPCommand, + MoveCommand: MoveCommand, + DoList: fmt.Sprintf("%s %s", name, ListCommand), + DoTOTPList: fmt.Sprintf("%s %s %s", name, TOTPCommand, TOTPListCommand), } isReadOnly := false isClip := true @@ -201,6 +207,7 @@ func Usage() ([]string, error) { results = append(results, command(EnvCommand, "", "display environment variable information")) results = append(results, command(FindCommand, "criteria", "perform a simplistic text search over the entry keys")) results = append(results, command(HelpCommand, "", "show this usage information")) + results = append(results, subCommand(HelpCommand, HelpAdvancedCommand, "", "display verbose help information")) results = append(results, command(InsertCommand, "entry", "insert a new entry into the store")) results = append(results, subCommand(InsertCommand, InsertMultiCommand, "entry", "insert a multi-line entry")) results = append(results, subCommand(InsertCommand, InsertTOTPCommand, "entry", "insert a new totp entry")) diff --git a/internal/cli/core_test.go b/internal/cli/core_test.go @@ -9,7 +9,7 @@ import ( func TestUsage(t *testing.T) { u, _ := cli.Usage() - if len(u) != 21 { + if len(u) != 22 { t.Errorf("invalid usage, out of date? %d", len(u)) } }