From e61ce2e9e49ac55c10182beedcdc57e5db5a7b04 Mon Sep 17 00:00:00 2001 From: Bernd Schoolmann Date: Tue, 18 Jul 2023 22:08:37 +0200 Subject: [PATCH] Improve autofill --- agent/actions/logins.go | 16 ++++++ agent/bitwarden/models/models.go | 2 +- autofill/autofill.go | 24 +++++--- autofill/gioAutofillDialog.go | 96 ++++++++++++++++++++++---------- autofill/uinput/dvorak.go | 62 +++++++++++++++++++-- autofill/uinput/qwerty.go | 66 +++++++++++++++++++++- autofill/uinput/uinput.go | 25 +++++---- cmd/autofill.go | 4 +- go.mod | 13 ++++- go.sum | 35 ++++++++++++ ipc/ipc.go | 1 + 11 files changed, 286 insertions(+), 58 deletions(-) diff --git a/agent/actions/logins.go b/agent/actions/logins.go index 4064490..537144c 100644 --- a/agent/actions/logins.go +++ b/agent/actions/logins.go @@ -3,7 +3,10 @@ package actions import ( "fmt" "runtime/debug" + "strings" + "time" + "github.com/pquerna/otp/totp" "github.com/quexten/goldwarden/agent/bitwarden/crypto" "github.com/quexten/goldwarden/agent/config" "github.com/quexten/goldwarden/agent/sockets" @@ -65,6 +68,19 @@ func handleGetLoginCipher(request ipc.IPCMessage, cfg *config.Config, vault *vau decryptedLogin.Notes = string(decryptedNotes) } } + if !login.Login.Totp.IsNull() { + decryptedTotp, err := crypto.DecryptWith(login.Login.Totp, cipherKey) + if err == nil { + code, err := totp.GenerateCode(string(strings.ReplaceAll(string(decryptedTotp), " ", "")), time.Now()) + if err == nil { + decryptedLogin.TwoFactorCode = code + } else { + fmt.Println(err) + } + } else { + fmt.Println(string(decryptedTotp)) + } + } if approved, err := systemauth.GetApproval("Approve Credential Access", fmt.Sprintf("%s on %s>%s>%s is trying to access credentials for user %s on entry %s", ctx.UserName, ctx.GrandParentProcessName, ctx.ParentProcessName, ctx.ProcessName, decryptedLogin.Username, decryptedLogin.Name)); err != nil || !approved { response, err = ipc.IPCMessageFromPayload(ipc.ActionResponse{ diff --git a/agent/bitwarden/models/models.go b/agent/bitwarden/models/models.go index a066db8..231d23e 100644 --- a/agent/bitwarden/models/models.go +++ b/agent/bitwarden/models/models.go @@ -132,7 +132,7 @@ type LoginCipher struct { URI crypto.EncString URIs []URI Username crypto.EncString `json:",omitempty"` - Totp string `json:",omitempty"` + Totp crypto.EncString `json:",omitempty"` } type URIMatch int diff --git a/autofill/autofill.go b/autofill/autofill.go index def7e77..d664d6e 100644 --- a/autofill/autofill.go +++ b/autofill/autofill.go @@ -1,4 +1,5 @@ //go:build autofill + package autofill import ( @@ -48,7 +49,7 @@ func ListLogins() ([]ipc.DecryptedLoginCipher, error) { } } -func Run(layout string) { +func Run(layout string, useCopyPaste bool) { logins, err := ListLogins() if err != nil { panic(err) @@ -68,13 +69,20 @@ func Run(layout string) { if err != nil { panic(err) } - // todo implement alternative auto type - clipboard.WriteAll(string(login.Username)) - uinput.Paste(layout) - uinput.TypeString(string(uinput.KeyTab), layout) - clipboard.WriteAll(login.Password) - uinput.Paste(layout) - clipboard.WriteAll("") + + if useCopyPaste { + clipboard.WriteAll(string(login.Username)) + uinput.Paste(layout) + uinput.TypeString(string(uinput.KeyTab), layout) + clipboard.WriteAll(login.Password) + uinput.Paste(layout) + } else { + uinput.TypeString(string(login.Username), layout) + uinput.TypeString(string(uinput.KeyTab), layout) + uinput.TypeString(string(login.Password), layout) + } + + clipboard.WriteAll(login.TwoFactorCode) c <- true }) } diff --git a/autofill/gioAutofillDialog.go b/autofill/gioAutofillDialog.go index fab9197..802e1c4 100644 --- a/autofill/gioAutofillDialog.go +++ b/autofill/gioAutofillDialog.go @@ -5,7 +5,9 @@ import ( "image" "image/color" "log" + "math" "os" + "os/user" "sort" "strings" @@ -20,7 +22,7 @@ import ( "gioui.org/unit" "gioui.org/widget" "gioui.org/widget/material" - gops "github.com/mitchellh/go-ps" + "github.com/shirou/gopsutil/v3/process" ) type AutofillEntry struct { @@ -38,50 +40,85 @@ type scoredAutofillEntry struct { score int } -func getProcesses() []string { - var processes []string - procs, err := gops.Processes() +func getUserProcs() []string { + procNames := []string{} + + procs, err := process.Processes() if err != nil { return []string{} } - for _, proc := range procs { - processes = append(processes, proc.Executable()) + user, err := user.Current() + if err != nil { + continue + } + + procuser, err := proc.Username() + if err != nil { + continue + } + if procuser == user.Username { + procName, err := proc.Name() + if err != nil { + continue + } + procNames = append(procNames, strings.ToLower(procName)) + } + } - return processes + return procNames } func GetFilteredAutofillEntries(entries []AutofillEntry, filter string) []AutofillEntry { - if len(filter) < 2 { + if len(filter) == 0 { return []AutofillEntry{} } - processes := getProcesses() + filter = strings.ToLower(filter) + + // filter entrien by whether they contain the filter string + filteredEntries := []AutofillEntry{} + for _, entry := range entries { + name := strings.ToLower(entry.Name) + if strings.HasPrefix(name, filter) { + filteredEntries = append(filteredEntries, entry) + } + } + + processes := getUserProcs() scoredEntries := []scoredAutofillEntry{} - for _, entry := range entries { + for _, entry := range filteredEntries { score := 0 - if strings.Contains(strings.ToLower(entry.Name), strings.ToLower(filter)) { - score += 10 - } - if strings.HasPrefix(strings.ToLower(entry.Name), strings.ToLower(filter)) { - score += 5 - } - if strings.Contains(strings.ToLower(entry.Username), strings.ToLower(filter)) { - score += 3 - } - if strings.HasPrefix(strings.ToLower(entry.Username), strings.ToLower(filter)) { - score += 2 - } + name := strings.ToLower(entry.Name) + filter = strings.ToLower(filter) + + maxProcessScore := 0 for _, process := range processes { - if strings.Contains(strings.ToLower(entry.Name), strings.ToLower(process)) { - score += 5 - break + score := 0 + + sharedPrefixLen := 0 + for i := 0; i < len(process) && i < len(entry.Name); i++ { + if process[i] == name[i] { + sharedPrefixLen++ + } else { + break + } + } + sharedPrefixLenPercent := float32(sharedPrefixLen) / float32(math.Min(float64(len(process)), float64(len(name)))) + + if sharedPrefixLen > 0 { + score += int(sharedPrefixLenPercent * 7) + } + + if score > maxProcessScore { + maxProcessScore = score } } + score += maxProcessScore scoredEntries = append(scoredEntries, scoredAutofillEntry{entry, score}) } @@ -89,12 +126,15 @@ func GetFilteredAutofillEntries(entries []AutofillEntry, filter string) []Autofi return scoredEntries[i].score > scoredEntries[j].score }) - var filteredEntries []AutofillEntry + var filteredEntries1 []AutofillEntry for _, scoredEntry := range scoredEntries { - filteredEntries = append(filteredEntries, scoredEntry.autofillEntry) + if scoredEntry.score == 0 { + continue + } + filteredEntries1 = append(filteredEntries1, scoredEntry.autofillEntry) } - return filteredEntries + return filteredEntries1 } func RunAutofill(entries []AutofillEntry, onAutofillFunc func(string, chan bool)) { diff --git a/autofill/uinput/dvorak.go b/autofill/uinput/dvorak.go index e544241..a1679f8 100644 --- a/autofill/uinput/dvorak.go +++ b/autofill/uinput/dvorak.go @@ -224,12 +224,12 @@ func (d Dvorak) TypeKey(key Key, keyboard uinput.Keyboard) error { case Key0: keyboard.KeyPress(uinput.Key0) break - case KeyHyphen: - keyboard.KeyPress(uinput.KeyApostrophe) - break case KeyTab: keyboard.KeyPress(uinput.KeyTab) break + case KeyHyphen: + keyboard.KeyPress(uinput.KeyApostrophe) + break case KeyExclamationMark: keyboard.KeyDown(uinput.KeyLeftshift) keyboard.KeyPress(uinput.Key1) @@ -240,7 +240,61 @@ func (d Dvorak) TypeKey(key Key, keyboard uinput.Keyboard) error { keyboard.KeyPress(uinput.Key2) keyboard.KeyUp(uinput.KeyLeftshift) break - + case KeyHash: + keyboard.KeyDown(uinput.KeyLeftshift) + keyboard.KeyPress(uinput.Key3) + keyboard.KeyUp(uinput.KeyLeftshift) + break + case KeyDollar: + keyboard.KeyDown(uinput.KeyLeftshift) + keyboard.KeyPress(uinput.Key4) + keyboard.KeyUp(uinput.KeyLeftshift) + break + case KeyPercent: + keyboard.KeyDown(uinput.KeyLeftshift) + keyboard.KeyPress(uinput.Key5) + keyboard.KeyUp(uinput.KeyLeftshift) + break + case KeyCaret: + keyboard.KeyDown(uinput.KeyLeftshift) + keyboard.KeyPress(uinput.Key6) + keyboard.KeyUp(uinput.KeyLeftshift) + break + case KeyAmpersand: + keyboard.KeyDown(uinput.KeyLeftshift) + keyboard.KeyPress(uinput.Key7) + keyboard.KeyUp(uinput.KeyLeftshift) + break + case KeyAsterisk: + keyboard.KeyDown(uinput.KeyLeftshift) + keyboard.KeyPress(uinput.Key8) + keyboard.KeyUp(uinput.KeyLeftshift) + break + case KeyDot: + keyboard.KeyPress(uinput.KeyE) + break + case KeyComma: + keyboard.KeyPress(uinput.KeyW) + break + case KeyQuestionMark: + keyboard.KeyDown(uinput.KeyLeftshift) + keyboard.KeyPress(uinput.KeyLeftbrace) + keyboard.KeyUp(uinput.KeyLeftshift) + break + case KeySemicolon: + keyboard.KeyPress(uinput.KeyZ) + break + case KeyColon: + keyboard.KeyDown(uinput.KeyLeftshift) + keyboard.KeyPress(uinput.KeyZ) + keyboard.KeyUp(uinput.KeyLeftshift) + break + case KeySlash: + keyboard.KeyPress(uinput.KeyLeftbrace) + break + case KeyApostrophe: + keyboard.KeyPress(uinput.KeyQ) + break case KeySpace: keyboard.KeyPress(uinput.KeySpace) break diff --git a/autofill/uinput/qwerty.go b/autofill/uinput/qwerty.go index 0e37894..9830bfe 100644 --- a/autofill/uinput/qwerty.go +++ b/autofill/uinput/qwerty.go @@ -224,12 +224,12 @@ func (d Qwerty) TypeKey(key Key, keyboard uinput.Keyboard) error { case Key0: keyboard.KeyPress(uinput.Key0) break - case KeyHyphen: - keyboard.KeyPress(uinput.KeyMinus) - break case KeyTab: keyboard.KeyPress(uinput.KeyTab) break + case KeyHyphen: + keyboard.KeyPress(uinput.KeyMinus) + break case KeyExclamationMark: keyboard.KeyDown(uinput.KeyLeftshift) keyboard.KeyPress(uinput.Key1) @@ -240,6 +240,66 @@ func (d Qwerty) TypeKey(key Key, keyboard uinput.Keyboard) error { keyboard.KeyPress(uinput.Key2) keyboard.KeyUp(uinput.KeyLeftshift) break + case KeyHash: + keyboard.KeyDown(uinput.KeyLeftshift) + keyboard.KeyPress(uinput.Key3) + keyboard.KeyUp(uinput.KeyLeftshift) + break + case KeyDollar: + keyboard.KeyDown(uinput.KeyLeftshift) + keyboard.KeyPress(uinput.Key4) + keyboard.KeyUp(uinput.KeyLeftshift) + break + case KeyPercent: + keyboard.KeyDown(uinput.KeyLeftshift) + keyboard.KeyPress(uinput.Key5) + keyboard.KeyUp(uinput.KeyLeftshift) + break + case KeyCaret: + keyboard.KeyDown(uinput.KeyLeftshift) + keyboard.KeyPress(uinput.Key6) + keyboard.KeyUp(uinput.KeyLeftshift) + break + case KeyAmpersand: + keyboard.KeyDown(uinput.KeyLeftshift) + keyboard.KeyPress(uinput.Key7) + keyboard.KeyUp(uinput.KeyLeftshift) + break + case KeyAsterisk: + keyboard.KeyDown(uinput.KeyLeftshift) + keyboard.KeyPress(uinput.Key8) + keyboard.KeyUp(uinput.KeyLeftshift) + break + case KeyDot: + keyboard.KeyPress(uinput.KeyDot) + break + case KeyComma: + keyboard.KeyPress(uinput.KeyW) + break + case KeyQuestionMark: + keyboard.KeyDown(uinput.KeyLeftshift) + keyboard.KeyPress(uinput.KeySlash) + keyboard.KeyUp(uinput.KeyLeftshift) + break + case KeySemicolon: + keyboard.KeyPress(uinput.KeySemicolon) + break + case KeyColon: + keyboard.KeyDown(uinput.KeyLeftshift) + keyboard.KeyPress(uinput.KeySemicolon) + keyboard.KeyUp(uinput.KeyLeftshift) + break + case KeySlash: + keyboard.KeyPress(uinput.KeySlash) + break + case KeyApostrophe: + keyboard.KeyPress(uinput.KeyApostrophe) + break + + case KeySpace: + keyboard.KeyPress(uinput.KeySpace) + break + default: fmt.Println("Unknown key: ", key) fmt.Println("Please add it to the QWERTY layout") diff --git a/autofill/uinput/uinput.go b/autofill/uinput/uinput.go index a8b3e6c..2d39a56 100644 --- a/autofill/uinput/uinput.go +++ b/autofill/uinput/uinput.go @@ -77,27 +77,27 @@ const ( Key7 Key = "7" Key8 Key = "8" Key9 Key = "9" + KeyHyphen Key = "-" - KeyAtSign Key = "@" KeySpace Key = " " KeyExclamationMark Key = "!" + KeyAtSign Key = "@" + KeyHash Key = "#" KeyDollar Key = "$" - KeyEqual Key = "=" - KeySemicolon Key = ";" - KeyColon Key = ":" - KeyComma Key = "," - KeyPeriod Key = "." - KeySlash Key = "/" - KeyBackslash Key = "\\" - KeyPound Key = "#" KeyPercent Key = "%" KeyCaret Key = "^" KeyAmpersand Key = "&" KeyAsterisk Key = "*" - KeyPlus Key = "+" - KeyEquals Key = "=" - KeyUnderscore Key = "_" + + KeyDot Key = "." + KeyComma Key = "," + KeySlash Key = "/" + KeyBackslash Key = "\\" + KeyQuestionMark Key = "?" + KeySemicolon Key = ";" + KeyColon Key = ":" + KeyApostrophe Key = "'" KeyTab Key = "\t" ) @@ -138,6 +138,7 @@ func TypeString(text string, layout string) error { if err != nil { fmt.Println(err) } + time.Sleep(10 * time.Millisecond) } err = keyboard.Close() diff --git a/cmd/autofill.go b/cmd/autofill.go index 0694bef..c92bcab 100644 --- a/cmd/autofill.go +++ b/cmd/autofill.go @@ -13,11 +13,13 @@ var autofillCmd = &cobra.Command{ Long: `Autofill credentials`, Run: func(cmd *cobra.Command, args []string) { layout := cmd.Flag("layout").Value.String() - autofill.Run(layout) + useCopyPaste, _ := cmd.Flags().GetBool("use-copy-paste") + autofill.Run(layout, useCopyPaste) }, } func init() { rootCmd.AddCommand(autofillCmd) autofillCmd.PersistentFlags().String("layout", "qwerty", "") + autofillCmd.PersistentFlags().Bool("use-copy-paste", false, "") } diff --git a/go.mod b/go.mod index b7a9f92..3f85468 100644 --- a/go.mod +++ b/go.mod @@ -24,8 +24,19 @@ require ( require ( gioui.org/cpu v0.0.0-20210817075930-8d6a761490d2 // indirect gioui.org/shader v1.0.6 // indirect + github.com/agnivade/levenshtein v1.1.1 // indirect github.com/atotto/clipboard v0.1.4 // indirect + github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc // indirect + github.com/go-ole/go-ole v1.2.6 // indirect github.com/go-text/typesetting v0.0.0-20230602202114-9797aefac433 // indirect + github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect + github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect + github.com/pquerna/otp v1.4.0 // indirect + github.com/shirou/gopsutil/v3 v3.23.6 // indirect + github.com/shoenig/go-m1cpu v0.1.6 // indirect + github.com/tklauser/go-sysconf v0.3.11 // indirect + github.com/tklauser/numcpus v0.6.0 // indirect + github.com/yusufpapurcu/wmi v1.2.3 // indirect golang.org/x/exp/shiny v0.0.0-20220827204233-334a2380cb91 // indirect golang.org/x/image v0.5.0 // indirect golang.org/x/text v0.11.0 // indirect @@ -41,7 +52,7 @@ require ( github.com/pkg/errors v0.9.1 // indirect github.com/rs/zerolog v1.29.1 github.com/spf13/pflag v1.0.5 // indirect - github.com/stretchr/testify v1.8.1 // indirect + github.com/stretchr/testify v1.8.4 // indirect github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect go.uber.org/multierr v1.11.0 // indirect inet.af/peercred v0.0.0-20210906144145-0893ea02156a diff --git a/go.sum b/go.sum index ebdf37b..92a3bd0 100644 --- a/go.sum +++ b/go.sum @@ -8,8 +8,11 @@ gioui.org/shader v1.0.6 h1:cvZmU+eODFR2545X+/8XucgZdTtEjR3QWW6W65b0q5Y= gioui.org/shader v1.0.6/go.mod h1:mWdiME581d/kV7/iEhLmUgUK5iZ09XR5XpduXzbePVM= github.com/LlamaNite/llamalog v0.2.1 h1:k9XugHmyQqJhCrogca808Jl2rrEKIWMtWyLKX+xX9Mg= github.com/LlamaNite/llamalog v0.2.1/go.mod h1:zopgmWk8utZPfZCPa/uvQkv99Lan3pRrw/9inbIYZeo= +github.com/agnivade/levenshtein v1.1.1 h1:QY8M92nrzkmr798gCo3kmMyqXFzdQVpxLlGPRBij0P8= +github.com/agnivade/levenshtein v1.1.1/go.mod h1:veldBMzWxcCG2ZvUTKD2kJNRdCk5hVbJomOvKkmgYbo= github.com/amenzhinsky/go-polkit v0.0.0-20210519083301-ee6a51849123 h1:VdNhe94PF9yn6KudYnpcBb6bH7l+wsEy9yn6Ulm1/j8= github.com/amenzhinsky/go-polkit v0.0.0-20210519083301-ee6a51849123/go.mod h1:CdMR3dsiNi5M2BbtFlMo85mRbNt6LiMw04UBzJmoVEU= +github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0/go.mod h1:t2tdKJDJF9BV14lnkjHmOQgcvEKgtqs5a1N3LNdJhGE= github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4= github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI= github.com/awnumar/memcall v0.1.2 h1:7gOfDTL+BJ6nnbtAp9+HQzUFjtP1hEseRQq8eP055QY= @@ -18,11 +21,16 @@ github.com/awnumar/memguard v0.22.3 h1:b4sgUXtbUjhrGELPbuC62wU+BsPQy+8lkWed9Z+pj github.com/awnumar/memguard v0.22.3/go.mod h1:mmGunnffnLHlxE5rRgQc3j+uwPZ27eYb61ccr8Clz2Y= github.com/bendahl/uinput v1.6.2 h1:tIz52QyKDx1i1nObUkts3AZa/bULfLhPA5a+xKGlRPI= github.com/bendahl/uinput v1.6.2/go.mod h1:Np7w3DINc9wB83p12fTAM3DPPhFnAKP0WTXRqCQJ6Z8= +github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc h1:biVzkmvwrH8WK8raXaxBx6fRVTlJILwEwQGL1I/ByEI= +github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dgryski/trifles v0.0.0-20200323201526-dd97f9abfb48/go.mod h1:if7Fbed8SFyPtHLHbg49SI7NAdJiC5WIA09pe59rfAA= +github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= +github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-text/typesetting v0.0.0-20230602202114-9797aefac433 h1:Pdyvqsfi1QYgFfZa4R8otBOtgO+CGyBDMEG8cM3jwvE= github.com/go-text/typesetting v0.0.0-20230602202114-9797aefac433/go.mod h1:KmrpWuSMFcO2yjmyhGpnBGQHSKAoEgMTSSzvLDzCuEA= github.com/go-text/typesetting-utils v0.0.0-20230412163830-89e4bcfa3ecc h1:9Kf84pnrmmjdRzZIkomfjowmGUhHs20jkrWYw/I6CYc= @@ -30,6 +38,8 @@ github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5x github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= @@ -38,6 +48,8 @@ github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2 github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/keys-pub/go-libfido2 v1.5.3 h1:vtgHxlSB43u6lj0TSuA3VvT6z3E7VI+L1a2hvMFdECk= github.com/keys-pub/go-libfido2 v1.5.3/go.mod h1:P0V19qHwJNY0htZwZDe9Ilvs/nokGhdFX7faKFyZ6+U= +github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4= +github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= @@ -53,10 +65,19 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw= +github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= +github.com/pquerna/otp v1.4.0 h1:wZvl1TIVxKRThZIBiwOOHOGP/1+nZyWBil9Y2XNEDzg= +github.com/pquerna/otp v1.4.0/go.mod h1:dkJfzwRKNiegxyNb54X/3fLwhCynbMspSyWKnvi1AEg= github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= github.com/rs/zerolog v1.29.1 h1:cO+d60CHkknCbvzEWxP0S9K6KqyTjrCNUy1LdQLCGPc= github.com/rs/zerolog v1.29.1/go.mod h1:Le6ESbR7hc+DP6Lt1THiV8CQSdkkNrd3R0XbEgp3ZBU= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/shirou/gopsutil/v3 v3.23.6 h1:5y46WPI9QBKBbK7EEccUPNXpJpNrvPuTD0O2zHEHT08= +github.com/shirou/gopsutil/v3 v3.23.6/go.mod h1:j7QX50DrXYggrpN30W0Mo+I4/8U2UUIQrnrhqUeWrAU= +github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= +github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= +github.com/shoenig/test v0.6.4/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnjqq0k= github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= @@ -64,14 +85,21 @@ github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/tink-crypto/tink-go/v2 v2.0.0 h1:LutFJapahsM0i/6hKfOkzSYTVeshmFs+jloZXqe9z9s= github.com/tink-crypto/tink-go/v2 v2.0.0/go.mod h1:QAbyq9LZncomYnScxlfaHImbV4ieNIe6bnu/Xcqqox4= +github.com/tklauser/go-sysconf v0.3.11 h1:89WgdJhk5SNwJfu+GKyYveZ4IaJ7xAkecBo+KdJV0CM= +github.com/tklauser/go-sysconf v0.3.11/go.mod h1:GqXfhXY3kiPa0nAXPDIQIWzJbMCB7AmcWpGR8lSZfqI= +github.com/tklauser/numcpus v0.6.0 h1:kebhY2Qt+3U6RNK7UqpYNA+tJ23IBEGKkB7JQBfDYms= +github.com/tklauser/numcpus v0.6.0/go.mod h1:FEZLMke0lhOUG6w2JadTzp0a+Nl8PF/GFkQ5UVIcaL4= github.com/twpayne/go-pinentry v0.2.0 h1:hS5NEJiilop9xP9pBX/1NYduzDlGGMdg1KamTBTrOWw= github.com/twpayne/go-pinentry v0.2.0/go.mod h1:r6buhMwARxnnL0VRBqfd1tE6Fadk1kfP00GRMutEspY= github.com/vmihailenco/msgpack/v5 v5.3.5 h1:5gO0H1iULLWGhs2H5tbAHIZTV8/cYafcFOr9znI5mJU= @@ -79,6 +107,8 @@ github.com/vmihailenco/msgpack/v5 v5.3.5/go.mod h1:7xyJ9e+0+9SaZT0Wt1RGleJXzli6Q github.com/vmihailenco/tagparser/v2 v2.0.0 h1:y09buUbR+b5aycVFQs/g70pqKVZNBmxwAhO7/IwNM9g= github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw= +github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= @@ -100,8 +130,10 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210301091718-77cc2087c03b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -109,7 +141,9 @@ golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA= golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= @@ -125,6 +159,7 @@ golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/ipc/ipc.go b/ipc/ipc.go index 4529fdd..d40f2af 100644 --- a/ipc/ipc.go +++ b/ipc/ipc.go @@ -434,6 +434,7 @@ type DecryptedLoginCipher struct { UUID string OrgaizationID string Notes string + TwoFactorCode string } type GetNotesRequest struct {