mirror of
https://github.com/rwinkhart/libmutton.git
synced 2026-08-28 04:46:42 -04:00
Update wiki for new changes; fix compilation for some platforms
This commit is contained in:
+1
-1
@@ -18,7 +18,7 @@ func CopyString(clearClipboardAutomatically bool, copySubject string) error {
|
|||||||
return errors.New("unable to copy to clipboard: " + err.Error())
|
return errors.New("unable to copy to clipboard: " + err.Error())
|
||||||
}
|
}
|
||||||
if clearClipboardAutomatically {
|
if clearClipboardAutomatically {
|
||||||
LaunchClipClearProcess(copySubject)
|
LaunchClearProcess(copySubject)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -18,7 +18,7 @@ func CopyString(clearClipboardAutomatically bool, copySubject string) error {
|
|||||||
return errors.New("unable to copy to clipboard: " + err.Error())
|
return errors.New("unable to copy to clipboard: " + err.Error())
|
||||||
}
|
}
|
||||||
if clearClipboardAutomatically {
|
if clearClipboardAutomatically {
|
||||||
LaunchClipClearProcess(copySubject)
|
LaunchClearProcess(copySubject)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -30,7 +30,7 @@ func CopyString(clearClipboardAutomatically bool, copySubject string) error {
|
|||||||
return errors.New("unable to copy to clipboard: " + err.Error())
|
return errors.New("unable to copy to clipboard: " + err.Error())
|
||||||
}
|
}
|
||||||
if clearClipboardAutomatically {
|
if clearClipboardAutomatically {
|
||||||
LaunchClipClearProcess(copySubject)
|
LaunchClearProcess(copySubject)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -17,7 +17,7 @@ func CopyString(clearClipboardAutomatically bool, copySubject string) error {
|
|||||||
return errors.New("unable to copy to clipboard: " + err.Error())
|
return errors.New("unable to copy to clipboard: " + err.Error())
|
||||||
}
|
}
|
||||||
if clearClipboardAutomatically {
|
if clearClipboardAutomatically {
|
||||||
LaunchClipClearProcess(copySubject)
|
LaunchClearProcess(copySubject)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,9 +10,9 @@ import (
|
|||||||
"github.com/rwinkhart/libmutton/global"
|
"github.com/rwinkhart/libmutton/global"
|
||||||
)
|
)
|
||||||
|
|
||||||
// LaunchClipClearProcess launches the timed clipboard clearing process.
|
// LaunchClearProcess launches the timed clipboard clearing process.
|
||||||
// For non-interactive CLI implementations, an entirely separate process is created for this purpose.
|
// For non-interactive CLI implementations, an entirely separate process is created for this purpose.
|
||||||
func LaunchClipClearProcess(copySubject string) {
|
func LaunchClearProcess(copySubject string) {
|
||||||
cmd := exec.Command(os.Args[0], "clipclear")
|
cmd := exec.Command(os.Args[0], "clipclear")
|
||||||
cmd.SysProcAttr = global.GetSysProcAttr()
|
cmd.SysProcAttr = global.GetSysProcAttr()
|
||||||
_ = back.WriteToStdin(cmd, copySubject)
|
_ = back.WriteToStdin(cmd, copySubject)
|
||||||
|
|||||||
@@ -2,9 +2,9 @@
|
|||||||
|
|
||||||
package clip
|
package clip
|
||||||
|
|
||||||
// LaunchClipClearProcess launches the timed clipboard clearing process.
|
// LaunchClearProcess launches the timed clipboard clearing process.
|
||||||
// For interactive GUI/TUI implementations, the clipboard clearing process is launched as a goroutine.
|
// For interactive GUI/TUI implementations, the clipboard clearing process is launched as a goroutine.
|
||||||
// copySubject can be omitted to clear the clipboard immediately and unconditionally.
|
// copySubject can be omitted to clear the clipboard immediately and unconditionally.
|
||||||
func LaunchClipClearProcess(copySubject string) {
|
func LaunchClearProcess(copySubject string) {
|
||||||
go ClipClearProcess(copySubject)
|
go ClearProcess(copySubject)
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-3
@@ -1,9 +1,7 @@
|
|||||||
package global
|
package global
|
||||||
|
|
||||||
type ByteInputFetcher func(prompt string) []byte
|
|
||||||
|
|
||||||
var (
|
var (
|
||||||
GetPassword ByteInputFetcher // Clients should set this to a function that fetches hidden input from the user
|
GetPassword func(prompt string) []byte // Clients should set this to a function that fetches hidden input from the user
|
||||||
RootLength = len(EntryRoot)
|
RootLength = len(EntryRoot)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,2 @@
|
|||||||
## Planned Breaking Changes
|
## Planned Breaking Changes
|
||||||
Leading up to the v1.0.0 release, breaking changes are both expected and planned. These changes are expected to require manual intervention from the end-user, and thus MUTN/libmutton should not be used prior to v1.0.0 if this is not acceptable.
|
Leading up to the v1.0.0 release, breaking changes are both expected and planned. These changes are expected to require manual intervention from the end-user, and thus MUTN/libmutton should not be used prior to v1.0.0 if this is not acceptable.
|
||||||
|
|
||||||
These changes include, but may expand beyond the following:
|
|
||||||
|
|
||||||
- Password aging data will be stored for each entry (to remind the user when it is time to change passwords)
|
|
||||||
- Will be included in entry names or in external file (to prevent needing to decrypt entries to access this information)
|
|
||||||
|
|||||||
+6
-21
@@ -7,7 +7,7 @@ libmutton was designed to be usable as a library for building other compatible p
|
|||||||
Custom build tags can (and sometimes must) be used to achieve desired results.
|
Custom build tags can (and sometimes must) be used to achieve desired results.
|
||||||
|
|
||||||
These are as follows:
|
These are as follows:
|
||||||
- `interactive`: If making an interactive interface (GUI/TUI/interactive CLI), you probably need to use this build tag. Without it, your entire program will exit after any given operation is completed. This behavior is only desired for non-interactive CLI implementations, such as MUTN. Currently, most errors will result in the program exiting **even with this build tag**. Specific types of errors (such as config parsing/SSH dialing errors) have been made exempt from this behavior.
|
- `interactive`: If making an interactive interface (GUI/TUI/interactive CLI), you probably need to use this build tag. Without it, your entire program will exit after any given operation is completed. This behavior is only desired for non-interactive CLI implementations, such as MUTN.
|
||||||
- `wsl`: Allows creating a Linux binary that can interact with the Windows clipboard (for WSL)
|
- `wsl`: Allows creating a Linux binary that can interact with the Windows clipboard (for WSL)
|
||||||
- `termux`: Allows creating an Android binary that can interact with the Termux clipboard (for Android)
|
- `termux`: Allows creating an Android binary that can interact with the Termux clipboard (for Android)
|
||||||
|
|
||||||
@@ -17,34 +17,19 @@ These are as follows:
|
|||||||
- `crypt.RetryPassword`, true by default, determines whether the crypt package should verify user-typed passwords and re-prompt if needed. Turn this off to handle this uniquely in the client.
|
- `crypt.RetryPassword`, true by default, determines whether the crypt package should verify user-typed passwords and re-prompt if needed. Turn this off to handle this uniquely in the client.
|
||||||
|
|
||||||
## Required Arguments
|
## Required Arguments
|
||||||
- `clipclear`: Should be accepted by all non-interactive CLI libmutton implementations (not required for interactive GUI/TUI implementations). In order to clear the clipboard on a timer, non-interactive libmutton-based password managers call another instance of their executable with the `clipclear` argument (e.g. `mutn clipclear`) with the intended clipboard contents provided via STDIN. If after 30 seconds the clipboard contents have not changed, they are cleared. Please accept a `clipclear` argument that calls `clip.ClipClearArgument()`.
|
- `clipclear`: Should be accepted by all non-interactive CLI libmutton implementations (not required for interactive GUI/TUI implementations). In order to clear the clipboard on a timer, non-interactive libmutton-based password managers call another instance of their executable with the `clipclear` argument (e.g. `mutn clipclear`) with the intended clipboard contents provided via STDIN. If after 30 seconds the clipboard contents have not changed, they are cleared. Please accept a `clipclear` argument that calls `clip.ClearArgument()`.
|
||||||
- `startrcwd`: Should be accepted by all libmutton implementations making use of the RCW daemon to cache passwords. Please accept a `startrcwd` argument that calls `crypt.RCWDArgument()`.
|
- `startrcwd`: Should be accepted by all libmutton implementations making use of the RCW daemon to cache passwords. Please accept a `startrcwd` argument that calls `crypt.RCWDArgument()`.
|
||||||
|
|
||||||
## Mobile Clipboard Management
|
## Mobile Clipboard Management
|
||||||
In an effort to reduce dependencies not needed in most environments, libmutton no longer provides clipboard management for mobile platforms (except for Termux). This should be handled by your GUI toolkit/framework.
|
In an effort to reduce dependencies not needed in most environments, libmutton no longer provides clipboard management for mobile platforms (except for Termux). This should be handled by your GUI toolkit/framework.
|
||||||
|
|
||||||
## Configuration
|
## Configuration
|
||||||
libmutton-based password manager clients should all share the same INI configuration file.
|
libmutton-based password manager clients should all share the same JSON configuration file.
|
||||||
|
|
||||||
On UNIX-like systems, this is located at `~/.config/libmutton/libmutton.ini`. On Windows, it is located at `~\AppData\Local\libmutton\config\libmutton.ini`.
|
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.
|
||||||
|
|
||||||
### Base `libmutton.ini` Layout
|
|
||||||
The current base layout of `libmutton.ini` will change leading up to release v1.0.0. As of right now, the specification is as follows:
|
|
||||||
```
|
|
||||||
[LIBMUTTON]
|
|
||||||
sshUser = <remote user>
|
|
||||||
sshIP = <remote ip>
|
|
||||||
sshPort = <remote ssh port>
|
|
||||||
sshKey = <ssh private key identity file path>
|
|
||||||
sshKeyProtected = <true/false>
|
|
||||||
sshEntryRoot = <remote entry root>
|
|
||||||
sshIsWindows = <true/false>
|
|
||||||
```
|
|
||||||
If creating a third-party client that requires extra configuration to be stored, please use the same file and create a new INI section for your application-specific configuration, e.g.:
|
|
||||||
```
|
|
||||||
[THIRD-PARTY-CLIENT-NAME]
|
|
||||||
configKey = <value>
|
|
||||||
```
|
|
||||||
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.
|
||||||
|
|
||||||
## Entry Format
|
## Entry Format
|
||||||
|
|||||||
+2
-5
@@ -1,11 +1,8 @@
|
|||||||
## Migrating From Other Password Managers
|
## Migrating From Other Password Managers
|
||||||
**Important Notice**: The libmutton entry format is not final and has two [breaking changes planned prior to release v1.0.0](https://github.com/rwinkhart/libmutton/blob/main/wiki/breaking.md). This guide will be updated accordingly.
|
**Important Notice**: The libmutton entry format is not final and has two [breaking changes planned prior to release v1.0.0](https://github.com/rwinkhart/libmutton/blob/main/wiki/breaking.md). This guide will be updated accordingly.
|
||||||
### pass
|
### pass
|
||||||
#### libmutton < v0.4.0
|
Current libmutton-based password managers use a custom, embedded cryptography agent ([RCW](https://github.com/rwinkhart/rcw)). GPG-encrypted entries (from `pass` or libmutton releases prior to v0.4.0) can simply be decrypted and re-encrypted with RCW. A [conversion program](https://github.com/rwinkhart/sshyp-labs/releases/tag/v2.0.0) has been published for this purpose.
|
||||||
libmutton-based password managers (prior to v0.4.0) use GnuPG encryption and an entry format similar to that of [pass](https://www.passwordstore.org/). Because of this, any entries in `pass` format can simply be dropped into `~/.local/share/libmutton`.
|
|
||||||
#### libmutton >= v0.4.0
|
|
||||||
Current libmutton-based password managers use a custom, embedded cryptography agent ([RCW](https://github.com/rwinkhart/rcw)). The layout of the entries themselves has not changed, so gpg-encrypted entries (from `pass` or older libmutton releases) can simply be decrypted and re-encrypted with RCW. A [conversion program](https://github.com/rwinkhart/sshyp-labs/releases/tag/v2.0.0) has been published for this purpose.
|
|
||||||
### sshyp
|
### sshyp
|
||||||
`sshyp`, though also `pass`-compatible, makes some changes to the entry format that take effect once the entry has been imported. The changes made by `sshyp` are not compatible with libmutton, and as such `sshyp` entries must be converted before they can be used. A script for exporting to libmutton (prior to v0.4.0) has been published to the `sshyp` extension store. Simply run `sshyp tweak`, go to the "extension management" menu, and download the "export-to-libmutton" extension. After doing this, the `sshyp export` command can be used to export entries in libmutton format. If migrating into libmutton v0.4.0 or later, a second [conversion program](https://github.com/rwinkhart/sshyp-labs/releases/tag/v2.0.0) will be needed to re-encrypt the exported `sshyp` entries.
|
`sshyp`, though also `pass`-compatible, makes some changes to the entry format that take effect once the entry has been imported. The changes made by `sshyp` are not compatible with libmutton, and as such `sshyp` entries must be converted before they can be used. A script for exporting to libmutton (prior to v0.4.0) has been published to the `sshyp` extension store. Simply run `sshyp tweak`, go to the "extension management" menu, and download the "export-to-libmutton" extension. After doing this, the `sshyp export` command can be used to export entries in libmutton v0.3.X format. If migrating into libmutton v0.4.0 or later, a second [conversion program](https://github.com/rwinkhart/sshyp-labs/releases/tag/v2.0.0) will be needed to re-encrypt the exported `sshyp` entries.
|
||||||
### Other
|
### Other
|
||||||
The formats for many other password managers can be converted to the `pass` format with community scripts. Some of these scripts are listed [here](https://www.passwordstore.org/#migration). Once converted, entries can be dropped into `~/.local/share/libmutton`. If migrating into libmutton v0.4.0 or later, a second [conversion program](https://github.com/rwinkhart/sshyp-labs/releases/tag/v2.0.0) will be needed to re-encrypt the converted entries.
|
The formats for many other password managers can be converted to the `pass` format with community scripts. Some of these scripts are listed [here](https://www.passwordstore.org/#migration). Once converted, entries can be dropped into `~/.local/share/libmutton`. If migrating into libmutton v0.4.0 or later, a second [conversion program](https://github.com/rwinkhart/sshyp-labs/releases/tag/v2.0.0) will be needed to re-encrypt the converted entries.
|
||||||
|
|||||||
Reference in New Issue
Block a user