Port to latest libmutton/rcw development versions

This commit is contained in:
2025-05-08 19:44:51 -04:00
parent 752b9d616a
commit 2f34fc2c0c
7 changed files with 38 additions and 57 deletions
+7
View File
@@ -3,6 +3,7 @@ package cli
import (
"os"
"github.com/rwinkhart/libmutton/core"
"golang.org/x/term"
)
@@ -16,3 +17,9 @@ const (
AnsiBold = "\033[1m"
ansiBlackOnWhite = "\033[38;5;0;48;5;15m"
)
func init() {
core.GetPassphrase = func() []byte {
return inputHidden("RCW Passphrase:")
}
}
+4 -4
View File
@@ -22,16 +22,16 @@ func RenameCli(oldLocationIncomplete string) {
// EditEntryField edits a field of an entry at targetLocation (user input).
func EditEntryField(targetLocation string, hideSecrets bool, field int) {
// fetch old entry data (with all required lines present)
unencryptedEntry := core.GetOldEntryData(targetLocation, field, GetRCWPassphrase())
unencryptedEntry := core.GetOldEntryData(targetLocation, field)
// edit the field
switch field {
case 0:
unencryptedEntry[field] = string(GetRCWPassphrase())
unencryptedEntry[field] = string(inputHidden("Password:"))
case 1:
unencryptedEntry[field] = input("Username:")
case 2:
unencryptedEntry[field] = string(GetRCWPassphrase())
unencryptedEntry[field] = string(inputHidden("TOTP secret:"))
case 3:
unencryptedEntry[field] = input("URL:")
case 4: // edit notes fields
@@ -54,7 +54,7 @@ func EditEntryField(targetLocation string, hideSecrets bool, field int) {
// GenUpdate generates a new password for an entry at targetLocation (user input).
func GenUpdate(targetLocation string, hideSecrets bool) {
// fetch old entry data
unencryptedEntry := core.GetOldEntryData(targetLocation, 0, GetRCWPassphrase())
unencryptedEntry := core.GetOldEntryData(targetLocation, 0)
// generate a new password
unencryptedEntry[0] = inputPasswordGen()
+1 -1
View File
@@ -71,7 +71,7 @@ func EntryReader(decryptedEntry []string, hideSecrets, syncEnabled bool) {
// EntryReaderDecrypt is a wrapper for EntryReader that first decrypts an RCW-wrapped file before sending it to EntryReader.
func EntryReaderDecrypt(targetLocation string, hideSecrets bool) {
if isFile, _ := core.TargetIsFile(targetLocation, true, 2); isFile {
EntryReader(core.DecryptFileToSlice(targetLocation, GetRCWPassphrase()), hideSecrets, false) // never sync if decrypting straight to EntryReader, as this means the entry could not have been modified
EntryReader(core.DecryptFileToSlice(targetLocation), hideSecrets, false) // never sync if decrypting straight to EntryReader, as this means the entry could not have been modified
}
// do not exit, as this is the job of EntryReader
}
+1 -27
View File
@@ -8,35 +8,9 @@ import (
"github.com/rwinkhart/libmutton/core"
"github.com/rwinkhart/libmutton/sync"
"github.com/rwinkhart/rcw/daemon"
"github.com/rwinkhart/rcw/wrappers"
"golang.org/x/term"
)
// GetRCWPassphrase retrieves the RCW passphrase from the most accessible source.
// It first attempts to retrieve from the RCW daemon, then from user input.
// If it does not find an RCW daemon, it launches one to cache the passphrase.
func GetRCWPassphrase() []byte {
// request passphrase from RCW daemon
passphrase := daemon.CallDaemonIfOpen()
// if no passphrase was retrieved, request it from the user
if passphrase == nil {
for {
passphrase = inputHidden("RCW Passphrase:")
err := wrappers.RunSanityCheck(core.ConfigDir+"/sanity.rcw", passphrase)
if err != nil {
fmt.Println(core.AnsiError + "Failed to encrypt - " + err.Error() + core.AnsiReset)
continue
}
break
}
// since no daemon was found earlier, start a new one
core.LaunchRCWDProcess(string(passphrase))
}
return passphrase
}
// input prompts the user for input and returns the input as a string.
func input(prompt string) string {
fmt.Print("\n" + prompt + " ")
@@ -111,7 +85,7 @@ func inputPasswordGen() string {
func writeEntryCLI(targetLocation string, unencryptedEntry []string, hideSecrets bool) {
if core.EntryIsNotEmpty(unencryptedEntry) {
// write the entry to the target location
core.WriteEntry(targetLocation, []byte(strings.Join(unencryptedEntry, "\n")), GetRCWPassphrase())
core.WriteEntry(targetLocation, []byte(strings.Join(unencryptedEntry, "\n")))
// preview the entry
fmt.Println(AnsiBold + "\nEntry Preview:" + core.AnsiReset)
EntryReader(unencryptedEntry, hideSecrets, true)