1
1
Fork 0
Αυτό το commit περιλαμβάνεται σε:
infl00p 2021-07-20 18:20:29 +03:00
commit c38f214152
4 αρχεία άλλαξαν με 228 προσθήκες και 0 διαγραφές

8
go.mod Κανονικό αρχείο

@ -0,0 +1,8 @@
module github.com/infl00p/otprunner
go 1.16
require (
github.com/99designs/keyring v1.1.6
github.com/godbus/dbus v4.1.0+incompatible
)

43
go.sum Κανονικό αρχείο

@ -0,0 +1,43 @@
github.com/99designs/keyring v1.1.6 h1:kVDC2uCgVwecxCk+9zoCt2uEL6dt+dfVzMvGgnVcIuM=
github.com/99designs/keyring v1.1.6/go.mod h1:16e0ds7LGQQcT59QqkTg72Hh5ShM51Byv5PEmW6uoRU=
github.com/danieljoos/wincred v1.0.2 h1:zf4bhty2iLuwgjgpraD2E9UbvO+fe54XXGJbOwe23fU=
github.com/danieljoos/wincred v1.0.2/go.mod h1:SnuYRW9lp1oJrZX/dXJqr0cPK5gYXqx3EJbmjhLdK9U=
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/dvsekhvalnov/jose2go v0.0.0-20200901110807-248326c1351b h1:HBah4D48ypg3J7Np4N+HY/ZR76fx3HEUGxDU6Uk39oQ=
github.com/dvsekhvalnov/jose2go v0.0.0-20200901110807-248326c1351b/go.mod h1:7BvyPhdbLxMXIYTFPLsyJRFMsKmOZnQmzh6Gb+uquuM=
github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4=
github.com/godbus/dbus v4.1.0+incompatible h1:WqqLRTsQic3apZUK9qC5sGNfXthmPXzUZ7nQPrNITa4=
github.com/godbus/dbus v4.1.0+incompatible/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw=
github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU=
github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod h1:NMPJylDgVpX0MLRlPy15sqSwOFv/U1GZ2m21JhFfek0=
github.com/keybase/go-keychain v0.0.0-20190712205309-48d3d31d256d h1:Z+RDyXzjKE0i2sTjZ/b1uxiGtPhFy34Ou/Tk0qwN0kM=
github.com/keybase/go-keychain v0.0.0-20190712205309-48d3d31d256d/go.mod h1:JJNrCn9otv/2QP4D7SMJBgaleKpOf66PnW6F5WGNRIc=
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
github.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs=
github.com/mtibben/percent v0.2.1/go.mod h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ibNBTZrns=
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/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48=
github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4 h1:HuIa8hRrWRSrqYzx1qI49NNxhdi2PrY7gxVSq1JjLDc=
golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7 h1:LepdCS8Gf/MVejFIt8lsiexZATdoGVyp5bcyS+rYoUI=
golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=

161
main.go Κανονικό αρχείο

@ -0,0 +1,161 @@
package main
import (
"log"
"os/exec"
"strings"
"github.com/godbus/dbus"
"github.com/godbus/dbus/introspect"
"github.com/99designs/keyring"
)
var messages = map[string]string{
"errconn": "DBus Connection Problem",
"errname": "DBus Unable to request name or name taken",
}
const servicename = "labs.infl00p.otp"
const ifacename = "org.kde.krunner1"
const ifacepath = "/krunner"
const intro = `
<node>
<interface name="org.kde.krunner1">
<method name="Actions">
<annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="RemoteActions" />
<arg name="matches" type="a(sss)" direction="out" />
</method>
<method name="Run">
<arg name="matchId" type="s" direction="in"/>
<arg name="actionId" type="s" direction="in"/>
</method>
<method name="Match">
<arg name="query" type="s" direction="in"/>
<annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="RemoteMatches"/>
<arg name="matches" type="a(sssida{sv})" direction="out"/>
</method>
</interface>` + introspect.IntrospectDataString + `</node>`
type runner struct {
wallet keyring.Keyring
}
type match struct {
ID string
Text string
IconName string
Type int32
Relevance float64
Properties map[string]interface{}
}
func main() {
var r runner
// Open Dbus Connection
conn, err := dbus.SessionBus()
if err != nil {
log.Fatal(messages["errconn"])
}
rep, err := conn.RequestName(servicename, dbus.NameFlagDoNotQueue)
if err != nil || rep != dbus.RequestNameReplyPrimaryOwner {
log.Fatal(messages["errname"])
}
// KWallet
wallet, err := keyring.Open(keyring.Config{
AllowedBackends: []keyring.BackendType{keyring.KWalletBackend},
ServiceName: "kdewallet",
KWalletFolder: "otprunner",
})
if err != nil {
log.Fatal("Unable to Open KDE Wallet ", err.Error())
}
r.wallet = wallet
conn.Export(r, ifacepath, ifacename)
conn.Export(introspect.Introspectable(intro), ifacepath, "org.freedesktop.DBus.Introspectable")
// block
select {}
}
func (r runner) Actions() ([]string, *dbus.Error) {
return []string{}, nil
}
func (r runner) Match(query string) ([]match, *dbus.Error) {
key := strings.Split(query, " ")
matches := make([]match,0,100)
// List all keys in keyring
keys, err := r.wallet.Keys()
if err != nil {
log.Fatal("List Keys ", err.Error())
}
if len(key) > 1 && key[0] == "otp" {
if len(keys) > 0 {
size:=0
rel:=1.0
for i, v := range(keys) {
if v != "" && strings.Contains(v,key[1]) {
log.Println(size)
matches=matches[:size+1]
matches[size].ID = strings.ToLower(strings.Replace(v," ", "_",-1))
matches[size].Text = v
matches[size].IconName = "document-export-key"
matches[size].Type = 100
matches[size].Relevance = rel
rel= rel/1.1
size+=1
log.Println(i, matches[i])
}
}
return matches, nil
}
}
return matches, nil
}
func (r runner) Run(selection string, id string) *dbus.Error {
code, _ := r.wallet.Get(selection)
log.Println(code.Data)
err := AddToClipboard(string(code.Data))
if err != nil {
log.Fatal(err)
}
return nil
}
func AddToClipboard(s string) error {
cmd := exec.Command("xclip","-r","-selection","clipboard")
stdin, err := cmd.StdinPipe()
if err != nil {
return err
}
err = cmd.Start()
if err != nil {
return err
}
_, err = stdin.Write([]byte(s))
if err != nil {
return err
}
err = stdin.Close()
if err != nil {
return err
}
err = cmd.Wait()
if err != nil {
return err
}
return nil
}

16
otprunner.desktop Κανονικό αρχείο

@ -0,0 +1,16 @@
[Desktop Entry]
Name=OTPrunner
Comment=OTP Runner
X-KDE-ServiceTypes=Plasma/Runner
Type=Service
Icon=internet-web-browser
X-KDE-PluginInfo-Author=infL00p Labs
X-KDE-PluginInfo-Email=infl00p@gmail.com
X-KDE-PluginInfo-Name=otprunner
X-KDE-PluginInfo-Version=0.1
X-KDE-PluginInfo-License=GPL-3.0
X-KDE-PluginInfo-EnabledByDefault=true
X-Plasma-API=DBus
X-Plasma-DBusRunner-Service=labs.infl00p.otp
X-Plasma-DBusRunner-Path=/krunner