Add functionality to randomly generate passwords on the insert

page.
This commit is contained in:
Greg 2019-10-01 18:22:38 -04:00
parent bf1709dc4c
commit e275ad6607
4 changed files with 100 additions and 8 deletions

View File

@ -6,6 +6,7 @@ import (
"io/ioutil" "io/ioutil"
"os" "os"
"path" "path"
"strconv"
"strings" "strings"
"sync" "sync"
"time" "time"
@ -23,6 +24,7 @@ import (
"gopkg.in/yaml.v2" "gopkg.in/yaml.v2"
"git.wow.st/gmp/passgo" "git.wow.st/gmp/passgo"
"git.wow.st/gmp/rand"
) )
type conf struct { type conf struct {
@ -470,24 +472,92 @@ func eventLoop() {
} }
var insName, insValue string var insName, insValue string
genBtn := &SelButton{SelColor: darkgray}
genBtn.Button = Button{Face: face, Label: "generate", Background: gray}
symBtn := &SelButton{SelColor: gray, Selected: true}
numBtn := &SelButton{SelColor: gray, Selected: true}
symBtn.Button = Button{Face: face, Label: "@", Background: darkgray}
numBtn.Button = Button{Face: face, Label: "#", Background: darkgray}
lenEd := &text.Editor{Face: face, SingleLine: true, Alignment: text.End}
lenEd.SetText("15")
lBtn := &Button{Face: face, Label: "<", Background: gray}
rBtn := &Button{Face: face, Label: ">", Background: gray}
updatePw := func() {
if !genBtn.Selected {
passvalEd.SetText("")
return
}
var gen rand.Generator
switch {
case symBtn.Selected && numBtn.Selected:
gen = rand.Char
case symBtn.Selected:
gen = rand.LettersSymbols
case numBtn.Selected:
gen = rand.LetterDigits
default:
gen = rand.Letter
}
l,_ := strconv.Atoi(lenEd.Text())
pw,_ := rand.Slice(gen,l)
passvalEd.SetText(string(pw))
}
insertPage = func() { insertPage = func() {
cs = flex.Rigid() c2 := flex.End(insertLabel.Layout(ops, flex.Rigid()))
c2 := flex.End(insertLabel.Layout(ops, cs))
c3 := flex.End(passnameLabel.Layout(ops, flex.Rigid())) c3 := flex.End(passnameLabel.Layout(ops, flex.Rigid()))
c4 := flex.End(passnameEd.Layout(c, q, ops, flex.Rigid())) c4 := flex.End(passnameEd.Layout(c, q, ops, flex.Rigid()))
c5 := flex.End(passvalLabel.Layout(ops, flex.Rigid())) c5 := flex.End(passvalLabel.Layout(ops, flex.Rigid()))
c6 := flex.End(passvalEd.Layout(c, q, ops, flex.Rigid())) c6 := flex.End(passvalEd.Layout(c, q, ops, flex.Rigid()))
cs = flex.Rigid()
al := &layout.Align{Alignment: layout.E} al := &layout.Align{Alignment: layout.E}
btnflx := &layout.Flex{Axis: layout.Horizontal} btnflx := &layout.Flex{Axis: layout.Horizontal}
btnflx.Init(ops, al.Begin(ops, cs)) btnflx.Init(ops, al.Begin(ops, flex.Rigid()))
bc1 := btnflx.End(backBtn.Layout(c, q, ops, btnflx.Rigid())) bc1 := btnflx.End(lBtn.Layout(c, q, ops, btnflx.Rigid()))
bc2 := btnflx.End(saveBtn.Layout(c, q, ops, btnflx.Rigid())) cs := btnflx.Rigid()
c7 := flex.End(al.End(btnflx.Layout(bc1, bc2))) cs.Width.Min = 60
flex.Layout(c1, c2, c3, c4, c5, c6, c7) bc2 := btnflx.End(lenEd.Layout(c, q, ops, cs))
bc3 := btnflx.End(rBtn.Layout(c, q, ops, btnflx.Rigid()))
bc4 := btnflx.End(symBtn.Layout(c, q, ops, btnflx.Rigid()))
bc5 := btnflx.End(numBtn.Layout(c, q, ops, btnflx.Rigid()))
bc6 := btnflx.End(genBtn.Layout(c, q, ops, btnflx.Rigid()))
c7 := flex.End(al.End(btnflx.Layout(bc1, bc2, bc3, bc4, bc5, bc6)))
btnflx.Init(ops, al.Begin(ops, flex.Rigid()))
bc1 = btnflx.End(backBtn.Layout(c, q, ops, btnflx.Rigid()))
bc2 = btnflx.End(saveBtn.Layout(c, q, ops, btnflx.Rigid()))
c8 := flex.End(al.End(btnflx.Layout(bc1, bc2)))
flex.Layout(c1, c2, c3, c4, c5, c6, c7, c8)
if lBtn.Clicked() {
l,_ := strconv.Atoi(lenEd.Text())
if l > 0 {
l -= 1
}
lenEd.SetText(strconv.Itoa(l))
updatePw()
w.Invalidate()
}
if rBtn.Clicked() {
l,_ := strconv.Atoi(lenEd.Text())
lenEd.SetText(strconv.Itoa(l+1))
updatePw()
w.Invalidate()
}
if genBtn.Clicked() {
updatePw()
w.Invalidate()
}
if symBtn.Clicked() {
updatePw()
w.Invalidate()
}
if numBtn.Clicked() {
updatePw()
w.Invalidate()
}
if backBtn.Clicked() { if backBtn.Clicked() {
w.Invalidate() w.Invalidate()
page = listPage page = listPage

View File

@ -56,6 +56,12 @@ func (b *Overlay) Layout(c ui.Config, ops *ui.Ops, cs layout.Constraints) layout
return ins.End(dims) return ins.End(dims)
} }
type SelButton struct {
Button
SelColor color.RGBA
Selected bool
}
type Button struct { type Button struct {
Face text.Face Face text.Face
Label string Label string
@ -127,3 +133,14 @@ func (b *Button) Layout(c ui.Config, q input.Queue, ops *ui.Ops, cs layout.Const
func (b *Button) Clicked() bool { func (b *Button) Clicked() bool {
return b.clicked return b.clicked
} }
func (b *SelButton) Clicked() bool {
if b.clicked {
b.Selected = !b.Selected
b.SelColor, b.Background = b.Background, b.SelColor
return true
} else {
return false
}
}

1
go.mod
View File

@ -5,6 +5,7 @@ go 1.12
require ( require (
gioui.org/ui v0.0.0-20190918172808-816f0e901fc6 gioui.org/ui v0.0.0-20190918172808-816f0e901fc6
git.wow.st/gmp/clip v0.0.0-20191001134149-1458ba6a7cf5 git.wow.st/gmp/clip v0.0.0-20191001134149-1458ba6a7cf5
git.wow.st/gmp/rand v0.0.0-20191001220155-a81bebfaf8b0
github.com/fsnotify/fsnotify v1.4.7 github.com/fsnotify/fsnotify v1.4.7
github.com/jcmdev0/gpgagent v0.0.0-20180509014935-5601b32d936c github.com/jcmdev0/gpgagent v0.0.0-20180509014935-5601b32d936c
golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7 golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7

4
go.sum
View File

@ -2,6 +2,10 @@ gioui.org/ui v0.0.0-20190918172808-816f0e901fc6 h1:LvHEYxyOW7g+PhOiAm8Delc3AUv9E
gioui.org/ui v0.0.0-20190918172808-816f0e901fc6/go.mod h1:PssKPKlqVIeyaed+0w492Xc2NgX5M3n6oZKOAj5rxoE= gioui.org/ui v0.0.0-20190918172808-816f0e901fc6/go.mod h1:PssKPKlqVIeyaed+0w492Xc2NgX5M3n6oZKOAj5rxoE=
git.wow.st/gmp/clip v0.0.0-20191001134149-1458ba6a7cf5 h1:OKeTjZST+/TKvtdA258NXJH+/gIx/xwyZxKrAezNFvk= git.wow.st/gmp/clip v0.0.0-20191001134149-1458ba6a7cf5 h1:OKeTjZST+/TKvtdA258NXJH+/gIx/xwyZxKrAezNFvk=
git.wow.st/gmp/clip v0.0.0-20191001134149-1458ba6a7cf5/go.mod h1:NLdpaBoMQNFqncwP8OVRNWUDw1Kt9XWm3snfT7cXu24= git.wow.st/gmp/clip v0.0.0-20191001134149-1458ba6a7cf5/go.mod h1:NLdpaBoMQNFqncwP8OVRNWUDw1Kt9XWm3snfT7cXu24=
git.wow.st/gmp/rand v0.0.0-20191001220006-66bfa936ad6b h1:yu3SnygEUgkNJ3xBXLkWHws7tki5qveZ6Kk7ybWj1GQ=
git.wow.st/gmp/rand v0.0.0-20191001220006-66bfa936ad6b/go.mod h1:8+2Gwnrpc5yuk8Wp6cBhxvGcNLumYiPbQ7n0SQ8h29A=
git.wow.st/gmp/rand v0.0.0-20191001220155-a81bebfaf8b0 h1:08wP00wvbDINsct1fzKV1xGGLvvtNsSb2X4CtIdpBzM=
git.wow.st/gmp/rand v0.0.0-20191001220155-a81bebfaf8b0/go.mod h1:8+2Gwnrpc5yuk8Wp6cBhxvGcNLumYiPbQ7n0SQ8h29A=
github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/jcmdev0/gpgagent v0.0.0-20180509014935-5601b32d936c h1:DCnjNrPDSEslcqqBgcZBxlLUIhk2elQVyf2V+HkyxJI= github.com/jcmdev0/gpgagent v0.0.0-20180509014935-5601b32d936c h1:DCnjNrPDSEslcqqBgcZBxlLUIhk2elQVyf2V+HkyxJI=