mirror of
https://github.com/quexten/goldwarden.git
synced 2024-08-17 07:00:37 +03:00
Improve autofill
This commit is contained in:
parent
11fe67fa36
commit
e61ce2e9e4
@ -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{
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
})
|
||||
}
|
||||
|
@ -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)) {
|
||||
|
@ -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
|
||||
|
@ -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")
|
||||
|
@ -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()
|
||||
|
@ -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, "")
|
||||
}
|
||||
|
13
go.mod
13
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
|
||||
|
35
go.sum
35
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=
|
||||
|
@ -434,6 +434,7 @@ type DecryptedLoginCipher struct {
|
||||
UUID string
|
||||
OrgaizationID string
|
||||
Notes string
|
||||
TwoFactorCode string
|
||||
}
|
||||
|
||||
type GetNotesRequest struct {
|
||||
|
Loading…
Reference in New Issue
Block a user