commit c6bec61a984ebe1dd61b5bacc3e826d7d58fd742
parent 6233ead43d7f5f5677e035054b67ddecb98997c3
Author: Sean Enck <sean@ttypty.com>
Date: Wed, 26 Jul 2023 20:47:45 -0400
more string and command transitions
Diffstat:
4 files changed, 30 insertions(+), 27 deletions(-)
diff --git a/internal/app/totp.go b/internal/app/totp.go
@@ -81,7 +81,7 @@ func clear() {
}
func colorWhenRules() ([]inputs.ColorWindow, error) {
- envTime := inputs.EnvironOrDefault(inputs.ColorBetweenEnv, inputs.TOTPDefaultBetween)
+ envTime := inputs.EnvColorBetween.Get()
if envTime == inputs.TOTPDefaultBetween {
return inputs.TOTPDefaultColorWindow, nil
}
diff --git a/internal/inputs/env.go b/internal/inputs/env.go
@@ -52,10 +52,13 @@ type (
canDefault bool
defaultValue string
}
+ // EnvironmentCommand are settings that are parsed as shell commands
+ EnvironmentCommand struct {
+ environmentBase
+ }
)
-// Shlex will do simple shell command lex-ing
-func Shlex(in string) ([]string, error) {
+func shlex(in string) ([]string, error) {
return shell.Fields(in, os.Getenv)
}
@@ -128,3 +131,12 @@ func (e EnvironmentString) Get() string {
}
return EnvironOrDefault(e.key, e.defaultValue)
}
+
+// Get will read (and shlex) the value if set
+func (e EnvironmentCommand) Get() ([]string, error) {
+ value := EnvironOrDefault(e.key, "")
+ if strings.TrimSpace(value) == "" {
+ return nil, nil
+ }
+ return shlex(value)
+}
diff --git a/internal/inputs/vars.go b/internal/inputs/vars.go
@@ -21,15 +21,9 @@ const (
keyModeEnv = prefixKey + "KEYMODE"
keyEnv = prefixKey + "KEY"
// KeyFileEnv is an OPTIONAL keyfile for the database
- KeyFileEnv = prefixKey + "KEYFILE"
- plainKeyMode = "plaintext"
- commandKeyMode = "command"
- // ColorBetweenEnv is a comma-delimited list of times to color totp outputs (e.g. 0:5,30:35 which is the default).
- ColorBetweenEnv = fieldTOTPEnv + "_BETWEEN"
- // ClipPasteEnv allows overriding the clipboard paste command
- ClipPasteEnv = clipBaseEnv + "PASTE"
- // ClipCopyEnv allows overriding the clipboard copy command
- ClipCopyEnv = clipBaseEnv + "COPY"
+ KeyFileEnv = prefixKey + "KEYFILE"
+ plainKeyMode = "plaintext"
+ commandKeyMode = "command"
defaultTOTPField = "totp"
commandArgsExample = "[cmd args...]"
detectedValue = "(detected)"
@@ -74,6 +68,12 @@ var (
EnvStore = EnvironmentString{environmentBase: environmentBase{key: prefixKey + "STORE"}, canDefault: false}
// EnvHookDir is the directory of hooks to execute
EnvHookDir = EnvironmentString{environmentBase: environmentBase{key: prefixKey + "HOOKDIR"}, canDefault: true, defaultValue: ""}
+ // EnvClipCopy allows overriding the clipboard copy command
+ EnvClipCopy = EnvironmentCommand{environmentBase: environmentBase{key: clipBaseEnv + "COPY"}}
+ // EnvClipPaste allows overriding the clipboard paste command
+ EnvClipPaste = EnvironmentCommand{environmentBase: environmentBase{key: clipBaseEnv + "PASTE"}}
+ // EnvColorBetween handles terminal coloring for TOTP windows (seconds)
+ EnvColorBetween = EnvironmentString{environmentBase: environmentBase{key: fieldTOTPEnv + "_BETWEEN"}, canDefault: true, defaultValue: TOTPDefaultBetween}
)
type (
@@ -137,7 +137,7 @@ func GetKey() ([]byte, error) {
var data []byte
switch useKeyMode {
case commandKeyMode:
- parts, err := Shlex(useKey)
+ parts, err := shlex(useKey)
if err != nil {
return nil, err
}
@@ -185,9 +185,9 @@ func ListEnvironmentVariables(showValues bool) []string {
results = append(results, e.formatEnvironmentVariable(false, fieldTOTPEnv, defaultTOTPField, "attribute name to store TOTP tokens within the database", []string{"string"}))
results = append(results, e.formatEnvironmentVariable(false, formatTOTPEnv, strings.ReplaceAll(strings.ReplaceAll(FormatTOTP("%s"), "%25s", "%s"), "&", " \\\n &"), "override the otpauth url used to store totp tokens. It must have ONE format\nstring ('%s') to insert the totp base code", []string{"otpauth//url/%s/args..."}))
results = append(results, e.formatEnvironmentVariable(false, EnvMaxTOTP.key, fmt.Sprintf("%d", EnvMaxTOTP.defaultValue), "time, in seconds, in which to show a TOTP token before automatically exiting", intArgs))
- results = append(results, e.formatEnvironmentVariable(false, ColorBetweenEnv, TOTPDefaultBetween, "override when to set totp generated outputs to different colors, must be a\nlist of one (or more) rules where a semicolon delimits the start and end\nsecond (0-60 for each)", []string{"start:end,start:end,start:end..."}))
- results = append(results, e.formatEnvironmentVariable(false, ClipPasteEnv, detectedValue, "override the detected platform paste command", []string{commandArgsExample}))
- results = append(results, e.formatEnvironmentVariable(false, ClipCopyEnv, detectedValue, "override the detected platform copy command", []string{commandArgsExample}))
+ results = append(results, e.formatEnvironmentVariable(false, EnvColorBetween.key, TOTPDefaultBetween, "override when to set totp generated outputs to different colors, must be a\nlist of one (or more) rules where a semicolon delimits the start and end\nsecond (0-60 for each)", []string{"start:end,start:end,start:end..."}))
+ results = append(results, e.formatEnvironmentVariable(false, EnvClipPaste.key, detectedValue, "override the detected platform paste command", []string{commandArgsExample}))
+ results = append(results, e.formatEnvironmentVariable(false, EnvClipCopy.key, detectedValue, "override the detected platform copy command", []string{commandArgsExample}))
results = append(results, e.formatEnvironmentVariable(false, EnvClipboardMax.key, fmt.Sprintf("%d", EnvClipboardMax.defaultValue), "override the amount of time before totp clears the clipboard (e.g. 10),\nmust be an integer", intArgs))
results = append(results, e.formatEnvironmentVariable(false, EnvPlatform.key, detectedValue, "override the detected platform", PlatformSet()))
results = append(results, e.formatEnvironmentVariable(false, EnvNoTOTP.key, no, "disable TOTP integrations", isYesNoArgs))
diff --git a/internal/platform/clipboard.go b/internal/platform/clipboard.go
@@ -6,7 +6,6 @@ import (
"fmt"
"os"
"os/exec"
- "strings"
osc "github.com/aymanbagabas/go-osc52"
"github.com/enckse/lockbox/internal/inputs"
@@ -30,14 +29,6 @@ func newClipboard(copying, pasting []string) (Clipboard, error) {
return Clipboard{copying: copying, pasting: pasting, MaxTime: max, isOSC52: false}, nil
}
-func overrideCommand(v string) ([]string, error) {
- value := inputs.EnvironOrDefault(v, "")
- if strings.TrimSpace(value) == "" {
- return nil, nil
- }
- return inputs.Shlex(value)
-}
-
// NewClipboard will retrieve the commands to use for clipboard operations.
func NewClipboard() (Clipboard, error) {
noClip, err := inputs.EnvNoClip.Get()
@@ -47,11 +38,11 @@ func NewClipboard() (Clipboard, error) {
if noClip {
return Clipboard{}, errors.New("clipboard is off")
}
- overridePaste, err := overrideCommand(inputs.ClipPasteEnv)
+ overridePaste, err := inputs.EnvClipPaste.Get()
if err != nil {
return Clipboard{}, err
}
- overrideCopy, err := overrideCommand(inputs.ClipCopyEnv)
+ overrideCopy, err := inputs.EnvClipCopy.Get()
if err != nil {
return Clipboard{}, err
}