mirror of
https://github.com/rwinkhart/libmutton.git
synced 2026-08-27 20:36:29 -04:00
Fully support non-destructive append in core.LibmuttonInit(); update copyright year for 2026
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
MIT License
|
MIT License
|
||||||
|
|
||||||
Copyright (c) 2024-2025 Randall Winkhart
|
Copyright (c) 2024-2026 Randall Winkhart
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|||||||
+1
-1
@@ -21,7 +21,7 @@ type CfgT struct {
|
|||||||
SSHKeyProtected *bool `json:"sshKeyProtected"`
|
SSHKeyProtected *bool `json:"sshKeyProtected"`
|
||||||
SSHIsWindows *bool `json:"sshIsWindows"`
|
SSHIsWindows *bool `json:"sshIsWindows"`
|
||||||
} `json:"libmutton"`
|
} `json:"libmutton"`
|
||||||
ThirdParty *map[string]any `json:"thirdParty"`
|
ClientSpecific *map[string]any `json:"clientSpecific"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load loads libmuttoncfg.json and returns the configuration.
|
// Load loads libmuttoncfg.json and returns the configuration.
|
||||||
|
|||||||
+10
-10
@@ -14,14 +14,14 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// LibmuttonInit creates the libmutton config structure based on user input.
|
// LibmuttonInit creates the libmutton config structure based on user input.
|
||||||
// rcwPassword and clientSpecificIniData can be left blank if not needed.
|
// rcwPassword and clientSpecificCfg can be left blank/nil if not needed.
|
||||||
func LibmuttonInit(inputCB func(prompt string) string, clientSpecificIniData map[string]any, rcwPassword []byte, preserveOldCfgDir bool, forceOfflineMode bool) error {
|
func LibmuttonInit(inputCB func(prompt string) string, clientSpecificCfg map[string]any, rcwPassword []byte, appendMode, forceOfflineMode bool) error {
|
||||||
// handle clientSpecificIniData
|
// handle clientSpecificCfg
|
||||||
newCfg := &config.CfgT{}
|
newCfg := &config.CfgT{}
|
||||||
if clientSpecificIniData != nil {
|
if clientSpecificCfg != nil {
|
||||||
newThirdPartyMap := make(map[string]any)
|
newClientSpecificMap := make(map[string]any)
|
||||||
maps.Copy(newThirdPartyMap, clientSpecificIniData)
|
maps.Copy(newClientSpecificMap, clientSpecificCfg)
|
||||||
newCfg.ThirdParty = &newThirdPartyMap
|
newCfg.ClientSpecific = &newClientSpecificMap
|
||||||
}
|
}
|
||||||
|
|
||||||
var r string
|
var r string
|
||||||
@@ -32,7 +32,7 @@ func LibmuttonInit(inputCB func(prompt string) string, clientSpecificIniData map
|
|||||||
}
|
}
|
||||||
if len(r) > 0 && r[0] == 'n' {
|
if len(r) > 0 && r[0] == 'n' {
|
||||||
// initialize libmutton directories
|
// initialize libmutton directories
|
||||||
_, err := global.DirInit(preserveOldCfgDir)
|
_, err := global.DirInit(appendMode)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.New("unable to initialize libmutton directories: " + err.Error())
|
return errors.New("unable to initialize libmutton directories: " + err.Error())
|
||||||
}
|
}
|
||||||
@@ -65,7 +65,7 @@ func LibmuttonInit(inputCB func(prompt string) string, clientSpecificIniData map
|
|||||||
|
|
||||||
// perform operations based on collected user input
|
// perform operations based on collected user input
|
||||||
//// initialize libmutton directories
|
//// initialize libmutton directories
|
||||||
oldDeviceID, err := global.DirInit(preserveOldCfgDir)
|
oldDeviceID, err := global.DirInit(appendMode)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.New("unable to initialize libmutton directories: " + err.Error())
|
return errors.New("unable to initialize libmutton directories: " + err.Error())
|
||||||
}
|
}
|
||||||
@@ -77,7 +77,7 @@ func LibmuttonInit(inputCB func(prompt string) string, clientSpecificIniData map
|
|||||||
newCfg.Libmutton.SSHPort = &sshPort
|
newCfg.Libmutton.SSHPort = &sshPort
|
||||||
newCfg.Libmutton.SSHKeyPath = &sshKeyPath
|
newCfg.Libmutton.SSHKeyPath = &sshKeyPath
|
||||||
newCfg.Libmutton.SSHKeyProtected = &sshKeyProtected
|
newCfg.Libmutton.SSHKeyProtected = &sshKeyProtected
|
||||||
err = config.Write(newCfg, false)
|
err = config.Write(newCfg, appendMode) // pass appendMode to allow not completely destroying existing (client-specific) config
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
**libmutton v0.5.0**
|
||||||
|
Release date TBD
|
||||||
|
|
||||||
|
This release adds password age tracking support and improves the robustness of core functionality.
|
||||||
+2
-2
@@ -153,7 +153,7 @@ func main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func helpServer() {
|
func helpServer() {
|
||||||
fmt.Print(back.AnsiBold + "\nlibmuttonserver | Copyright (c) 2024-2025 Randall Winkhart\n" + back.AnsiReset + `
|
fmt.Print(back.AnsiBold + "\nlibmuttonserver | Copyright (c) 2024-2026 Randall Winkhart\n" + back.AnsiReset + `
|
||||||
This software exists under the MIT license; you may redistribute it under certain conditions.
|
This software exists under the MIT license; you may redistribute it under certain conditions.
|
||||||
This program comes with absolutely no warranty; type "libmuttonserver version" for details.
|
This program comes with absolutely no warranty; type "libmuttonserver version" for details.
|
||||||
|
|
||||||
@@ -192,5 +192,5 @@ ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
|
|||||||
ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
|
||||||
OR OTHER DEALINGS IN THE SOFTWARE.` + "\n\n---------------------------------------------------------")
|
OR OTHER DEALINGS IN THE SOFTWARE.` + "\n\n---------------------------------------------------------")
|
||||||
fmt.Print(back.AnsiBold + "\n\n libmuttonserver" + back.AnsiReset + " Version " + global.LibmuttonVersion + "\n\n Copyright (c) 2024-2025: Randall Winkhart" + "\n\n")
|
fmt.Print(back.AnsiBold + "\n\n libmuttonserver" + back.AnsiReset + " Version " + global.LibmuttonVersion + "\n\n Copyright (c) 2024-2026: Randall Winkhart" + "\n\n")
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -28,7 +28,7 @@ libmutton-based password manager clients should all share the same JSON configur
|
|||||||
|
|
||||||
On UNIX-like systems, this is located at `~/.config/libmutton/libmuttoncfg.json`. On Windows, it is located at `~\AppData\Local\libmutton\config\libmuttoncfg.json`.
|
On UNIX-like systems, this is located at `~/.config/libmutton/libmuttoncfg.json`. On Windows, it is located at `~\AppData\Local\libmutton\config\libmuttoncfg.json`.
|
||||||
|
|
||||||
If creating a third-party client that requires extra configuration to be stored, please use the `ThirdParty` map in the `cfg.ConfigT` type (as used by `cfg.WriteConfig()`) to save your application-specific configuration.
|
If creating a third-party client that requires extra configuration to be stored, please use the `ClientSpecific` map in the `cfg.ConfigT` type (as used by `cfg.WriteConfig()`) to save your application-specific configuration.
|
||||||
|
|
||||||
This ensures that a user can use multiple client applications with the same configuration while avoiding conflicts.
|
This ensures that a user can use multiple client applications with the same configuration while avoiding conflicts.
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user