feat(pgp): Add <ESC> to cancel password prompt

Previously there was no way to cancel the password prompt.
This commit is contained in:
Ray Ganardi 2020-05-19 13:06:47 +02:00 committed by Drew DeVault
parent 58db517c8d
commit c32ab765a7
2 changed files with 19 additions and 10 deletions

View file

@ -537,11 +537,11 @@ func (aerc *Aerc) CloseBackends() error {
return returnErr
}
func (aerc *Aerc) GetPassword(title string, prompt string, cb func(string)) {
aerc.getpasswd = NewGetPasswd(title, prompt, func(pw string) {
func (aerc *Aerc) GetPassword(title string, prompt string, cb func(string, error)) {
aerc.getpasswd = NewGetPasswd(title, prompt, func(pw string, err error) {
aerc.getpasswd = nil
aerc.Invalidate()
cb(pw)
cb(pw, err)
})
aerc.getpasswd.OnInvalidate(func(_ ui.Drawable) {
aerc.Invalidate()
@ -553,7 +553,7 @@ func (aerc *Aerc) Initialize(ui *ui.UI) {
aerc.ui = ui
}
func (aerc *Aerc) DecryptKeys(keys []openpgp.Key, symmetric bool) ([]byte, error) {
func (aerc *Aerc) DecryptKeys(keys []openpgp.Key, symmetric bool) (b []byte, err error) {
// HACK HACK HACK
for _, key := range keys {
var ident *openpgp.Identity
@ -561,14 +561,18 @@ func (aerc *Aerc) DecryptKeys(keys []openpgp.Key, symmetric bool) ([]byte, error
break
}
aerc.GetPassword("Decrypt PGP private key",
fmt.Sprintf("Enter password for %s (%8X)",
fmt.Sprintf("Enter password for %s (%8X)\nPress <ESC> to cancel",
ident.Name, key.PublicKey.KeyId),
func(pass string) {
func(pass string, e error) {
if e != nil {
err = e
return
}
key.PrivateKey.Decrypt([]byte(pass))
})
for aerc.getpasswd != nil {
aerc.ui.Tick()
}
}
return nil, nil
return nil, err
}

View file

@ -1,6 +1,8 @@
package widgets
import (
"fmt"
"github.com/gdamore/tcell"
"git.sr.ht/~sircmpwn/aerc/lib/ui"
@ -8,13 +10,13 @@ import (
type GetPasswd struct {
ui.Invalidatable
callback func(string)
callback func(string, error)
title string
prompt string
input *ui.TextInput
}
func NewGetPasswd(title string, prompt string, cb func(string)) *GetPasswd {
func NewGetPasswd(title string, prompt string, cb func(string, error)) *GetPasswd {
getpasswd := &GetPasswd{
callback: cb,
title: title,
@ -46,7 +48,10 @@ func (gp *GetPasswd) Event(event tcell.Event) bool {
switch event.Key() {
case tcell.KeyEnter:
gp.input.Focus(false)
gp.callback(gp.input.String())
gp.callback(gp.input.String(), nil)
case tcell.KeyEsc:
gp.input.Focus(false)
gp.callback("", fmt.Errorf("no password provided"))
default:
gp.input.Event(event)
}