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" | ||||
| 	"os" | ||||
| 	"path" | ||||
| 	"strconv" | ||||
| 	"strings" | ||||
| 	"sync" | ||||
| 	"time" | ||||
|  | @ -23,6 +24,7 @@ import ( | |||
| 	"gopkg.in/yaml.v2" | ||||
| 
 | ||||
| 	"git.wow.st/gmp/passgo" | ||||
| 	"git.wow.st/gmp/rand" | ||||
| ) | ||||
| 
 | ||||
| type conf struct { | ||||
|  | @ -470,24 +472,92 @@ func eventLoop() { | |||
| 	} | ||||
| 
 | ||||
| 	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() { | ||||
| 		cs = flex.Rigid() | ||||
| 		c2 := flex.End(insertLabel.Layout(ops, cs)) | ||||
| 		c2 := flex.End(insertLabel.Layout(ops, flex.Rigid())) | ||||
| 
 | ||||
| 		c3 := flex.End(passnameLabel.Layout(ops, flex.Rigid())) | ||||
| 		c4 := flex.End(passnameEd.Layout(c, q, ops, flex.Rigid())) | ||||
| 		c5 := flex.End(passvalLabel.Layout(ops, flex.Rigid())) | ||||
| 		c6 := flex.End(passvalEd.Layout(c, q, ops, flex.Rigid())) | ||||
| 		cs = flex.Rigid() | ||||
| 
 | ||||
| 		al := &layout.Align{Alignment: layout.E} | ||||
| 		btnflx := &layout.Flex{Axis: layout.Horizontal} | ||||
| 		btnflx.Init(ops, al.Begin(ops, cs)) | ||||
| 		bc1 := btnflx.End(backBtn.Layout(c, q, ops, btnflx.Rigid())) | ||||
| 		bc2 := btnflx.End(saveBtn.Layout(c, q, ops, btnflx.Rigid())) | ||||
| 		c7 := flex.End(al.End(btnflx.Layout(bc1, bc2))) | ||||
| 		flex.Layout(c1, c2, c3, c4, c5, c6, c7) | ||||
| 		btnflx.Init(ops, al.Begin(ops, flex.Rigid())) | ||||
| 		bc1 := btnflx.End(lBtn.Layout(c, q, ops, btnflx.Rigid())) | ||||
| 		cs := btnflx.Rigid() | ||||
| 		cs.Width.Min = 60 | ||||
| 		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() { | ||||
| 			w.Invalidate() | ||||
| 			page = listPage | ||||
|  |  | |||
|  | @ -56,6 +56,12 @@ func (b *Overlay) Layout(c ui.Config, ops *ui.Ops, cs layout.Constraints) layout | |||
| 	return ins.End(dims) | ||||
| } | ||||
| 
 | ||||
| type SelButton struct { | ||||
| 	Button | ||||
| 	SelColor color.RGBA | ||||
| 	Selected bool | ||||
| } | ||||
| 
 | ||||
| type Button struct { | ||||
| 	Face       text.Face | ||||
| 	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 { | ||||
| 	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 ( | ||||
| 	gioui.org/ui v0.0.0-20190918172808-816f0e901fc6 | ||||
| 	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/jcmdev0/gpgagent v0.0.0-20180509014935-5601b32d936c | ||||
| 	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= | ||||
| 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/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/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= | ||||
| github.com/jcmdev0/gpgagent v0.0.0-20180509014935-5601b32d936c h1:DCnjNrPDSEslcqqBgcZBxlLUIhk2elQVyf2V+HkyxJI= | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user