From 32a16dcd8dc488c1f360553d9d9f6d121af1b367 Mon Sep 17 00:00:00 2001 From: Tim Culverhouse Date: Thu, 5 May 2022 12:53:15 -0500 Subject: pgp: check encryption keys before sending message Add check for public keys of all message recipients (to, cc, and bcc) before sending the message. Adds an OnFocusLost callback to header editors to facilitate a callback for checking keys whenever a new recipient is added (OnChange results in too many keyring checks). Once encryption is initially set, the callbacks are registered. If a public key is not available for any recipient, encryption is turned off. However, notably, the callbacks are still registered meaning as s soon as the user removes the recipients with missing keys, encryption is turned back on. Signed-off-by: Tim Culverhouse Tested-by: Koni Marti --- lib/ui/textinput.go | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'lib/ui') diff --git a/lib/ui/textinput.go b/lib/ui/textinput.go index aa153002..0a331dc4 100644 --- a/lib/ui/textinput.go +++ b/lib/ui/textinput.go @@ -26,6 +26,7 @@ type TextInput struct { scroll int text []rune change []func(ti *TextInput) + focusLost []func(ti *TextInput) tabcomplete func(s string) ([]string, string) completions []string prefix string @@ -157,6 +158,9 @@ func (ti *TextInput) MouseEvent(localX int, localY int, event tcell.Event) { } func (ti *TextInput) Focus(focus bool) { + if ti.focus && !focus { + ti.onFocusLost() + } ti.focus = focus if focus && ti.ctx != nil { cells := runewidth.StringWidth(string(ti.text[:ti.index])) @@ -274,6 +278,12 @@ func (ti *TextInput) onChange() { } } +func (ti *TextInput) onFocusLost() { + for _, focusLost := range ti.focusLost { + focusLost(ti) + } +} + func (ti *TextInput) updateCompletions() { if ti.tabcomplete == nil { // no completer @@ -304,6 +314,10 @@ func (ti *TextInput) OnChange(onChange func(ti *TextInput)) { ti.change = append(ti.change, onChange) } +func (ti *TextInput) OnFocusLost(onFocusLost func(ti *TextInput)) { + ti.focusLost = append(ti.focusLost, onFocusLost) +} + func (ti *TextInput) Event(event tcell.Event) bool { switch event := event.(type) { case *tcell.EventKey: -- cgit