Add functionality to randomly generate passwords on the insert
page.
This commit is contained in:
parent
bf1709dc4c
commit
e275ad6607
|
@ -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
|
||||||
|
|
|
@ -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
1
go.mod
|
@ -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
4
go.sum
|
@ -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=
|
||||||
|
|
Loading…
Reference in New Issue
Block a user