lockbox

password manager
Log | Files | Refs | README | LICENSE

commit a1294fc22219ed4c69ffd37adbc2a55271a944bb
parent 156c8c824520d6122badc1eeed441fcc7c1c5677
Author: Sean Enck <sean@ttypty.com>
Date:   Mon,  9 Dec 2024 18:37:46 -0500

cleaning up string/array mismatch, now it can't be mismatched

Diffstat:
Minternal/app/pwgen.go | 2+-
Minternal/app/totp.go | 2+-
Minternal/config/core.go | 1-
Minternal/config/env.go | 47+++++++++++++++++++++++++++++++----------------
Minternal/config/key.go | 2+-
Minternal/config/vars.go | 360++++++++++++++++++++++++++++++++++++++++---------------------------------------
Minternal/config/vars_test.go | 14+++++++-------
Minternal/platform/clip/core.go | 4++--
8 files changed, 227 insertions(+), 205 deletions(-)

diff --git a/internal/app/pwgen.go b/internal/app/pwgen.go @@ -31,7 +31,7 @@ func GeneratePassword(cmd CommandOptions) error { return fmt.Errorf("word count must be >= 1") } tmplString := config.EnvPasswordGenTemplate.Get() - wordList := config.EnvPasswordGenWordList.AsArray() + wordList := config.EnvPasswordGenWordList.Get() if len(wordList) == 0 { return errors.New("word list command must set") } diff --git a/internal/app/totp.go b/internal/app/totp.go @@ -79,7 +79,7 @@ func clearFunc() { } func colorWhenRules() ([]util.TimeWindow, error) { - envTime := config.EnvTOTPColorBetween.AsArray() + envTime := config.EnvTOTPColorBetween.Get() if slices.Compare(envTime, config.TOTPDefaultBetween) == 0 { return config.TOTPDefaultColorWindow, nil } diff --git a/internal/config/core.go b/internal/config/core.go @@ -38,7 +38,6 @@ const ( const ( canDefaultFlag = iota canExpandFlag - isArrayFlag isCommandFlag ) diff --git a/internal/config/env.go b/internal/config/env.go @@ -19,6 +19,11 @@ type ( environmentBase value T } + environmentStrings struct { + environmentDefault[string] + flags []stringsFlags + allowed []string + } // EnvironmentInt are environment settings that are integers EnvironmentInt struct { environmentDefault[int] @@ -29,18 +34,20 @@ type ( EnvironmentBool struct { environmentDefault[bool] } - // EnvironmentStrings are string-based settings - EnvironmentStrings struct { - environmentDefault[string] - flags []stringsFlags - allowed []string - } // EnvironmentFormatter allows for sending a string into a get request EnvironmentFormatter struct { environmentBase allowed string fxn func(string, string) string } + // EnvironmentString represents a string variable + EnvironmentString struct { + environmentStrings + } + // EnvironmentArray is an array of strings variable + EnvironmentArray struct { + environmentStrings + } metaData struct { value string allowed []string @@ -87,20 +94,20 @@ func (e EnvironmentInt) Get() (int64, error) { } // Get will read the string from the environment -func (e EnvironmentStrings) Get() string { - return stringsGet(e, store.GetString, func(val string) string { +func (e EnvironmentString) Get() string { + return stringsGet(e.environmentStrings, store.GetString, func(val string) string { return val }) } -// AsArray indicates the item should be queried as an array -func (e EnvironmentStrings) AsArray() []string { - return stringsGet(e, store.GetArray, func(val string) []string { +// Get indicates the item should be queried as an array +func (e EnvironmentArray) Get() []string { + return stringsGet(e.environmentStrings, store.GetArray, func(val string) []string { return strings.Split(val, arrayDelimiter) }) } -func stringsGet[T string | []string](e EnvironmentStrings, getter func(string) (T, bool), conv func(string) T) T { +func stringsGet[T string | []string](e environmentStrings, getter func(string) (T, bool), conv func(string) T) T { val, ok := getter(e.Key()) if !ok { flags := e.flattenFlags() @@ -116,7 +123,15 @@ func (e EnvironmentFormatter) Get(value string) string { return e.fxn(e.Key(), value) } -func (e EnvironmentStrings) display() metaData { +func (e EnvironmentArray) display() metaData { + return e.environmentStrings.display(true) +} + +func (e EnvironmentString) display() metaData { + return e.environmentStrings.display(false) +} + +func (e environmentStrings) display(isArray bool) metaData { var t tomlType t = tomlString v := "\"\"" @@ -124,7 +139,7 @@ func (e EnvironmentStrings) display() metaData { value := e.value flags := e.flattenFlags() canExpand := slices.Contains(flags, canExpandFlag) - if slices.Contains(flags, isArrayFlag) { + if isArray { t = tomlArray v = "[]" if slices.Contains(flags, isCommandFlag) { @@ -183,10 +198,10 @@ func (e EnvironmentFormatter) display() metaData { } } -func (e EnvironmentStrings) flattenFlags() []stringsFlags { +func (e environmentStrings) flattenFlags() []stringsFlags { flags := e.flags if slices.Contains(e.flags, isCommandFlag) { - flags = append(flags, canExpandFlag, isArrayFlag) + flags = append(flags, canExpandFlag) } return flags } diff --git a/internal/config/key.go b/internal/config/key.go @@ -55,7 +55,7 @@ func NewKey(defaultKeyModeType KeyModeType) (Key, error) { default: return Key{}, fmt.Errorf("unknown key mode: %s", keyMode) } - useKey := envPassword.AsArray() + useKey := envPassword.Get() isEmpty := len(useKey) == 0 if !isEmpty { if strings.TrimSpace(useKey[0]) == "" { diff --git a/internal/config/vars.go b/internal/config/vars.go @@ -12,103 +12,93 @@ import ( var ( // EnvClipTimeout gets the maximum clipboard time - EnvClipTimeout = environmentRegister( - EnvironmentInt{ - environmentDefault: newDefaultedEnvironment(45, - environmentBase{ - key: clipCategory + "TIMEOUT", - description: "Override the amount of time before totp clears the clipboard (seconds).", - }), - short: "clipboard max time", - }) + EnvClipTimeout = environmentRegister(EnvironmentInt{ + environmentDefault: newDefaultedEnvironment(45, + environmentBase{ + key: clipCategory + "TIMEOUT", + description: "Override the amount of time before totp clears the clipboard (seconds).", + }), + short: "clipboard max time", + }) // EnvJSONHashLength handles the hashing output length - EnvJSONHashLength = environmentRegister( - EnvironmentInt{ - environmentDefault: newDefaultedEnvironment(0, - environmentBase{ - key: jsonCategory + "HASH_LENGTH", - description: fmt.Sprintf("Maximum string length of the JSON value when '%s' mode is set for JSON output.", output.JSONModes.Hash), - }), - short: "hash length", - canZero: true, - }) + EnvJSONHashLength = environmentRegister(EnvironmentInt{ + environmentDefault: newDefaultedEnvironment(0, + environmentBase{ + key: jsonCategory + "HASH_LENGTH", + description: fmt.Sprintf("Maximum string length of the JSON value when '%s' mode is set for JSON output.", output.JSONModes.Hash), + }), + short: "hash length", + canZero: true, + }) // EnvClipOSC52 indicates if OSC52 clipboard mode is enabled - EnvClipOSC52 = environmentRegister( - EnvironmentBool{ - environmentDefault: newDefaultedEnvironment(false, - environmentBase{ - key: clipCategory + "OSC52", - description: "Enable OSC52 clipboard mode.", - }), - }) + EnvClipOSC52 = environmentRegister(EnvironmentBool{ + environmentDefault: newDefaultedEnvironment(false, + environmentBase{ + key: clipCategory + "OSC52", + description: "Enable OSC52 clipboard mode.", + }), + }) // EnvTOTPEnabled indicates if TOTP is allowed - EnvTOTPEnabled = environmentRegister( - EnvironmentBool{ - environmentDefault: newDefaultedEnvironment(true, - environmentBase{ - key: totpCategory + "ENABLED", - description: "Enable TOTP integrations.", - }), - }) + EnvTOTPEnabled = environmentRegister(EnvironmentBool{ + environmentDefault: newDefaultedEnvironment(true, + environmentBase{ + key: totpCategory + "ENABLED", + description: "Enable TOTP integrations.", + }), + }) // EnvReadOnly indicates if in read-only mode - EnvReadOnly = environmentRegister( - EnvironmentBool{ - environmentDefault: newDefaultedEnvironment(false, - environmentBase{ - key: "READONLY", - description: "Operate in readonly mode.", - }), - }) + EnvReadOnly = environmentRegister(EnvironmentBool{ + environmentDefault: newDefaultedEnvironment(false, + environmentBase{ + key: "READONLY", + description: "Operate in readonly mode.", + }), + }) // EnvClipEnabled indicates if clipboard is enabled - EnvClipEnabled = environmentRegister( - EnvironmentBool{ - environmentDefault: newDefaultedEnvironment(true, - environmentBase{ - key: clipCategory + "ENABLED", - description: "Enable clipboard operations.", - }), - }) + EnvClipEnabled = environmentRegister(EnvironmentBool{ + environmentDefault: newDefaultedEnvironment(true, + environmentBase{ + key: clipCategory + "ENABLED", + description: "Enable clipboard operations.", + }), + }) // EnvColorEnabled indicates if colors are enabled - EnvColorEnabled = environmentRegister( - EnvironmentBool{ - environmentDefault: newDefaultedEnvironment(true, - environmentBase{ - key: "COLOR_ENABLED", - description: "Enable terminal colors.", - }), - }) + EnvColorEnabled = environmentRegister(EnvironmentBool{ + environmentDefault: newDefaultedEnvironment(true, + environmentBase{ + key: "COLOR_ENABLED", + description: "Enable terminal colors.", + }), + }) // EnvHooksEnabled indicates if hooks are enabled - EnvHooksEnabled = environmentRegister( - EnvironmentBool{ - environmentDefault: newDefaultedEnvironment(true, - environmentBase{ - key: hookCategory + "ENABLED", - description: "Enable hooks", - }), - }) + EnvHooksEnabled = environmentRegister(EnvironmentBool{ + environmentDefault: newDefaultedEnvironment(true, + environmentBase{ + key: hookCategory + "ENABLED", + description: "Enable hooks", + }), + }) // EnvInteractive indicates if operating in interactive mode - EnvInteractive = environmentRegister( - EnvironmentBool{ - environmentDefault: newDefaultedEnvironment(true, - environmentBase{ - key: "INTERACTIVE", - description: "Enable interactive mode.", - }), - }) + EnvInteractive = environmentRegister(EnvironmentBool{ + environmentDefault: newDefaultedEnvironment(true, + environmentBase{ + key: "INTERACTIVE", + description: "Enable interactive mode.", + }), + }) // EnvTOTPTimeout indicates when TOTP display should timeout - EnvTOTPTimeout = environmentRegister( - EnvironmentInt{ - environmentDefault: newDefaultedEnvironment(120, - environmentBase{ - key: totpCategory + "TIMEOUT", - description: "Time, in seconds, to show a TOTP token before automatically exiting.", - }), - short: "max totp time", - canZero: false, - }) + EnvTOTPTimeout = environmentRegister(EnvironmentInt{ + environmentDefault: newDefaultedEnvironment(120, + environmentBase{ + key: totpCategory + "TIMEOUT", + description: "Time, in seconds, to show a TOTP token before automatically exiting.", + }), + short: "max totp time", + canZero: false, + }) // EnvTOTPEntry is the leaf token to use to store TOTP tokens - EnvTOTPEntry = environmentRegister( - EnvironmentStrings{ + EnvTOTPEntry = environmentRegister(EnvironmentString{ + environmentStrings: environmentStrings{ environmentDefault: newDefaultedEnvironment("totp", environmentBase{ key: totpCategory + "ENTRY", @@ -116,20 +106,22 @@ var ( }), allowed: []string{"<string>"}, flags: []stringsFlags{canDefaultFlag}, - }) + }, + }) // EnvPlatform is the platform that the application is running on - EnvPlatform = environmentRegister( - EnvironmentStrings{ + EnvPlatform = environmentRegister(EnvironmentString{ + environmentStrings: environmentStrings{ environmentDefault: newDefaultedEnvironment(detectedValue, environmentBase{ key: "PLATFORM", description: "Override the detected platform.", }), allowed: platform.Systems.List(), - }) + }, + }) // EnvStore is the location of the keepass file/store - EnvStore = environmentRegister( - EnvironmentStrings{ + EnvStore = environmentRegister(EnvironmentString{ + environmentStrings: environmentStrings{ environmentDefault: newDefaultedEnvironment("", environmentBase{ key: "STORE", @@ -138,10 +130,11 @@ var ( }), allowed: []string{fileExample}, flags: []stringsFlags{canExpandFlag}, - }) + }, + }) // EnvHookDir is the directory of hooks to execute - EnvHookDir = environmentRegister( - EnvironmentStrings{ + EnvHookDir = environmentRegister(EnvironmentString{ + environmentStrings: environmentStrings{ environmentDefault: newDefaultedEnvironment("", environmentBase{ key: hookCategory + "DIRECTORY", @@ -149,40 +142,46 @@ var ( }), allowed: []string{"<directory>"}, flags: []stringsFlags{canDefaultFlag, canExpandFlag}, - }) + }, + }) // EnvClipCopy allows overriding the clipboard copy command - EnvClipCopy = environmentRegister(EnvironmentStrings{ - environmentDefault: newDefaultedEnvironment("", - environmentBase{ - key: clipCategory + "COPY_COMMAND", - description: "Override the detected platform copy command.", - }), - flags: []stringsFlags{isCommandFlag}, + EnvClipCopy = environmentRegister(EnvironmentArray{ + environmentStrings: environmentStrings{ + environmentDefault: newDefaultedEnvironment("", + environmentBase{ + key: clipCategory + "COPY_COMMAND", + description: "Override the detected platform copy command.", + }), + flags: []stringsFlags{isCommandFlag}, + }, }) // EnvClipPaste allows overriding the clipboard paste command - EnvClipPaste = environmentRegister(EnvironmentStrings{ - environmentDefault: newDefaultedEnvironment("", - environmentBase{ - key: clipCategory + "PASTE_COMMAND", - description: "Override the detected platform paste command.", - }), - flags: []stringsFlags{isCommandFlag}, + EnvClipPaste = environmentRegister(EnvironmentArray{ + environmentStrings: environmentStrings{ + environmentDefault: newDefaultedEnvironment("", + environmentBase{ + key: clipCategory + "PASTE_COMMAND", + description: "Override the detected platform paste command.", + }), + flags: []stringsFlags{isCommandFlag}, + }, }) // EnvTOTPColorBetween handles terminal coloring for TOTP windows (seconds) - EnvTOTPColorBetween = environmentRegister( - EnvironmentStrings{ + EnvTOTPColorBetween = environmentRegister(EnvironmentArray{ + environmentStrings: environmentStrings{ environmentDefault: newDefaultedEnvironment(strings.Join(TOTPDefaultBetween, arrayDelimiter), environmentBase{ key: totpCategory + "COLOR_WINDOWS", description: fmt.Sprintf(`Override when to set totp generated outputs to different colors, must be a list of one (or more) rules where a '%s' delimits the start and end second (0-60 for each).`, util.TimeWindowSpan), }), - flags: []stringsFlags{isArrayFlag, canDefaultFlag}, + flags: []stringsFlags{canDefaultFlag}, allowed: exampleColorWindows, - }) + }, + }) // EnvKeyFile is an keyfile for the database - EnvKeyFile = environmentRegister( - EnvironmentStrings{ + EnvKeyFile = environmentRegister(EnvironmentString{ + environmentStrings: environmentStrings{ environmentDefault: newDefaultedEnvironment("", environmentBase{ key: credsCategory + "KEY_FILE", @@ -191,10 +190,11 @@ must be a list of one (or more) rules where a '%s' delimits the start and end se }), allowed: []string{"keyfile"}, flags: []stringsFlags{canDefaultFlag, canExpandFlag}, - }) + }, + }) // EnvDefaultModTime is modtime override ability for entries - EnvDefaultModTime = environmentRegister( - EnvironmentStrings{ + EnvDefaultModTime = environmentRegister(EnvironmentString{ + environmentStrings: environmentStrings{ environmentDefault: newDefaultedEnvironment("", environmentBase{ key: defaultCategory + "MODTIME", @@ -202,10 +202,11 @@ must be a list of one (or more) rules where a '%s' delimits the start and end se }), flags: []stringsFlags{canDefaultFlag}, allowed: []string{"modtime"}, - }) + }, + }) // EnvJSONMode controls how JSON is output in the 'data' field - EnvJSONMode = environmentRegister( - EnvironmentStrings{ + EnvJSONMode = environmentRegister(EnvironmentString{ + environmentStrings: environmentStrings{ environmentDefault: newDefaultedEnvironment(string(output.JSONModes.Hash), environmentBase{ key: jsonCategory + "MODE", @@ -213,15 +214,18 @@ must be a list of one (or more) rules where a '%s' delimits the start and end se }), flags: []stringsFlags{canDefaultFlag}, allowed: output.JSONModes.List(), - }) + }, + }) // EnvTOTPFormat supports formatting the TOTP tokens for generation of tokens - EnvTOTPFormat = environmentRegister(EnvironmentFormatter{environmentBase: environmentBase{ - key: totpCategory + "OTP_FORMAT", - description: "Override the otpauth url used to store totp tokens. It must have ONE format string ('%s') to insert the totp base code.", - }, fxn: formatterTOTP, allowed: "otpauth//url/%s/args..."}) + EnvTOTPFormat = environmentRegister(EnvironmentFormatter{ + environmentBase: environmentBase{ + key: totpCategory + "OTP_FORMAT", + description: "Override the otpauth url used to store totp tokens. It must have ONE format string ('%s') to insert the totp base code.", + }, fxn: formatterTOTP, allowed: "otpauth//url/%s/args...", + }) // EnvPasswordMode indicates how the password is read - EnvPasswordMode = environmentRegister( - EnvironmentStrings{ + EnvPasswordMode = environmentRegister(EnvironmentString{ + environmentStrings: environmentStrings{ environmentDefault: newDefaultedEnvironment(string(DefaultKeyMode), environmentBase{ key: credsCategory + "PASSWORD_MODE", @@ -231,9 +235,10 @@ Set to '%s' to ignore the set key value`, noKeyMode, IgnoreKeyMode), }), allowed: []string{string(AskKeyMode), string(commandKeyMode), string(IgnoreKeyMode), string(noKeyMode), string(plainKeyMode)}, flags: []stringsFlags{canDefaultFlag}, - }) - envPassword = environmentRegister( - EnvironmentStrings{ + }, + }) + envPassword = environmentRegister(EnvironmentArray{ + environmentStrings: environmentStrings{ environmentDefault: newDefaultedEnvironment(unset, environmentBase{ requirement: requiredKeyOrKeyFile, @@ -243,30 +248,29 @@ Set to '%s' to ignore the set key value`, noKeyMode, IgnoreKeyMode), commandKeyMode), }), allowed: []string{commandArgsExample, "password"}, - flags: []stringsFlags{isArrayFlag, canExpandFlag}, - }) + flags: []stringsFlags{canExpandFlag}, + }, + }) // EnvPasswordGenWordCount is the number of words that will be selected for password generation - EnvPasswordGenWordCount = environmentRegister( - EnvironmentInt{ - environmentDefault: newDefaultedEnvironment(8, - environmentBase{ - key: genCategory + "WORD_COUNT", - description: "Number of words to select and include in the generated password.", - }), - short: "word count", - }) + EnvPasswordGenWordCount = environmentRegister(EnvironmentInt{ + environmentDefault: newDefaultedEnvironment(8, + environmentBase{ + key: genCategory + "WORD_COUNT", + description: "Number of words to select and include in the generated password.", + }), + short: "word count", + }) // EnvPasswordGenTitle indicates if titling (e.g. uppercasing) will occur to words - EnvPasswordGenTitle = environmentRegister( - EnvironmentBool{ - environmentDefault: newDefaultedEnvironment(true, - environmentBase{ - key: genCategory + "TITLE", - description: "Title words during password generation.", - }), - }) + EnvPasswordGenTitle = environmentRegister(EnvironmentBool{ + environmentDefault: newDefaultedEnvironment(true, + environmentBase{ + key: genCategory + "TITLE", + description: "Title words during password generation.", + }), + }) // EnvPasswordGenTemplate is the output template for controlling how output words are placed together - EnvPasswordGenTemplate = environmentRegister( - EnvironmentStrings{ + EnvPasswordGenTemplate = environmentRegister(EnvironmentString{ + environmentStrings: environmentStrings{ environmentDefault: newDefaultedEnvironment("{{range $i, $val := .}}{{if $i}}-{{end}}{{$val.Text}}{{end}}", environmentBase{ key: genCategory + "TEMPLATE", @@ -274,19 +278,22 @@ Set to '%s' to ignore the set key value`, noKeyMode, IgnoreKeyMode), }), allowed: []string{"<go template>"}, flags: []stringsFlags{canDefaultFlag}, - }) + }, + }) // EnvPasswordGenWordList is the command text to generate the word list - EnvPasswordGenWordList = environmentRegister(EnvironmentStrings{ - environmentDefault: newDefaultedEnvironment("", - environmentBase{ - key: genCategory + "WORDS_COMMAND", - description: "Command to retrieve the word list to use for password generation (must be split by newline).", - }), - flags: []stringsFlags{isCommandFlag}, + EnvPasswordGenWordList = environmentRegister(EnvironmentArray{ + environmentStrings: environmentStrings{ + environmentDefault: newDefaultedEnvironment("", + environmentBase{ + key: genCategory + "WORDS_COMMAND", + description: "Command to retrieve the word list to use for password generation (must be split by newline).", + }), + flags: []stringsFlags{isCommandFlag}, + }, }) // EnvLanguage is the language to use for everything - EnvLanguage = environmentRegister( - EnvironmentStrings{ + EnvLanguage = environmentRegister(EnvironmentString{ + environmentStrings: environmentStrings{ environmentDefault: newDefaultedEnvironment("en-US", environmentBase{ key: "LANGUAGE", @@ -294,19 +301,19 @@ Set to '%s' to ignore the set key value`, noKeyMode, IgnoreKeyMode), }), allowed: []string{"<language code>"}, flags: []stringsFlags{canDefaultFlag}, - }) + }, + }) // EnvPasswordGenEnabled indicates if password generation is enabled - EnvPasswordGenEnabled = environmentRegister( - EnvironmentBool{ - environmentDefault: newDefaultedEnvironment(true, - environmentBase{ - key: genCategory + "ENABLED", - description: "Enable password generation.", - }), - }) + EnvPasswordGenEnabled = environmentRegister(EnvironmentBool{ + environmentDefault: newDefaultedEnvironment(true, + environmentBase{ + key: genCategory + "ENABLED", + description: "Enable password generation.", + }), + }) // EnvPasswordGenChars allows for restricting which characters can be used - EnvPasswordGenChars = environmentRegister( - EnvironmentStrings{ + EnvPasswordGenChars = environmentRegister(EnvironmentString{ + environmentStrings: environmentStrings{ environmentDefault: newDefaultedEnvironment("", environmentBase{ key: genCategory + "CHARACTERS", @@ -314,5 +321,6 @@ Set to '%s' to ignore the set key value`, noKeyMode, IgnoreKeyMode), }), allowed: []string{"<list of characters>"}, flags: []stringsFlags{canDefaultFlag}, - }) + }, + }) ) diff --git a/internal/config/vars_test.go b/internal/config/vars_test.go @@ -142,12 +142,12 @@ func checkInt(e config.EnvironmentInt, key, text string, def int64, allowZero bo func TestTOTPWindows(t *testing.T) { store.Clear() - val := config.EnvTOTPColorBetween.AsArray() + val := config.EnvTOTPColorBetween.Get() if slices.Compare(val, config.TOTPDefaultBetween) != 0 { t.Errorf("invalid read: %v", val) } store.SetArray("LOCKBOX_TOTP_COLOR_WINDOWS", []string{"1", "2", "3"}) - val = config.EnvTOTPColorBetween.AsArray() + val = config.EnvTOTPColorBetween.Get() if len(val) != 3 { t.Errorf("invalid read: %v", val) } @@ -155,17 +155,17 @@ func TestTOTPWindows(t *testing.T) { func TestUnsetArrays(t *testing.T) { store.Clear() - for _, i := range []config.EnvironmentStrings{ + for _, i := range []config.EnvironmentArray{ config.EnvClipCopy, config.EnvClipPaste, config.EnvPasswordGenWordList, } { - val := i.AsArray() + val := i.Get() if len(val) != 0 { t.Errorf("invalid array: %v (%s)", val, i.Key()) } store.SetArray(i.Key(), []string{"a"}) - val = i.AsArray() + val = i.Get() if len(val) != 1 { t.Errorf("invalid array: %v (%s)", val, i.Key()) } @@ -174,7 +174,7 @@ func TestUnsetArrays(t *testing.T) { func TestDefaultStrings(t *testing.T) { store.Clear() - for k, v := range map[string]config.EnvironmentStrings{ + for k, v := range map[string]config.EnvironmentString{ "totp": config.EnvTOTPEntry, "hash": config.EnvJSONMode, "en-US": config.EnvLanguage, @@ -195,7 +195,7 @@ func TestDefaultStrings(t *testing.T) { func TestEmptyStrings(t *testing.T) { store.Clear() - for _, v := range []config.EnvironmentStrings{ + for _, v := range []config.EnvironmentString{ config.EnvPlatform, config.EnvStore, config.EnvKeyFile, diff --git a/internal/platform/clip/core.go b/internal/platform/clip/core.go @@ -35,8 +35,8 @@ func New() (Board, error) { if !config.EnvClipEnabled.Get() { return Board{}, errors.New("clipboard is off") } - overridePaste := config.EnvClipPaste.AsArray() - overrideCopy := config.EnvClipCopy.AsArray() + overridePaste := config.EnvClipPaste.Get() + overrideCopy := config.EnvClipCopy.Get() setPaste := len(overridePaste) > 0 setCopy := len(overrideCopy) > 0 if setPaste && setCopy {