From 6713a8f4588f26f46c3e5fe0a69ead0f345617f3 Mon Sep 17 00:00:00 2001 From: Koni Marti Date: Wed, 2 Aug 2023 11:54:13 +0200 Subject: wizard: display warning when focus is lost Display the warning that the password is stored in plaintext after the focus of the password input field is lost. The current behavior of showing the warning after the first character is entered is ackward and confusing. It also eliminates the need to debounce the warning when a password is pasted. Reported-by: Brad Signed-off-by: Koni Marti Acked-by: Robin Jarry --- commands/new-account.go | 1 + lib/ui/tab.go | 6 ++++++ widgets/account-wizard.go | 29 +++++++++++++---------------- 3 files changed, 20 insertions(+), 16 deletions(-) diff --git a/commands/new-account.go b/commands/new-account.go index 2747b159..d67b5eca 100644 --- a/commands/new-account.go +++ b/commands/new-account.go @@ -32,6 +32,7 @@ func (NewAccount) Execute(aerc *widgets.Aerc, args []string) error { wizard.ConfigureTemporaryAccount(true) } } + wizard.Focus(true) aerc.NewTab(wizard, "New account") return nil } diff --git a/lib/ui/tab.go b/lib/ui/tab.go index b62764fb..6a5cbf50 100644 --- a/lib/ui/tab.go +++ b/lib/ui/tab.go @@ -157,6 +157,9 @@ func (tabs *Tabs) selectPriv(index int) bool { if vis, ok := prev.Content.(Visible); ok { vis.Show(false) } + if vis, ok := prev.Content.(Interactive); ok { + vis.Focus(false) + } tabs.pushHistory(tabs.curIndex) } tabs.curIndex = index @@ -164,6 +167,9 @@ func (tabs *Tabs) selectPriv(index int) bool { if vis, ok := next.Content.(Visible); ok { vis.Show(true) } + if vis, ok := next.Content.(Interactive); ok { + vis.Focus(true) + } Invalidate() } return true diff --git a/widgets/account-wizard.go b/widgets/account-wizard.go index 8c9739e6..7fa371fc 100644 --- a/widgets/account-wizard.go +++ b/widgets/account-wizard.go @@ -11,7 +11,6 @@ import ( "strconv" "strings" "sync" - "time" "github.com/gdamore/tcell/v2" "github.com/go-ini/ini" @@ -19,7 +18,6 @@ import ( "git.sr.ht/~rjarry/aerc/config" "git.sr.ht/~rjarry/aerc/lib/ui" - "git.sr.ht/~rjarry/aerc/log" ) const ( @@ -74,10 +72,16 @@ type AccountWizard struct { } func showPasswordWarning(aerc *Aerc) { - title := "The Wizard will store your passwords in plaintext" - text := "It is recommended to remove the plaintext passwords " + - "and use your personal password store with " + - "'source-cred-cmd' and 'outgoing-cred-cmd' after the setup." + title := "ATTENTION" + text := ` +The Wizard will store your passwords as clear text in: + + ~/.config/aerc/accounts.conf + +It is recommended to remove the clear text passwords and configure +'source-cred-cmd' and 'outgoing-cred-cmd' using your own password store +after the setup. +` warning := NewSelectorDialog( title, text, []string{"OK"}, 0, aerc.SelectedAccountUiConfig(), @@ -135,21 +139,14 @@ func NewAccountWizard(aerc *Aerc) *AccountWizard { wizard.smtpUri() }) var once sync.Once - var lastChange time.Time wizard.imapPassword.OnChange(func(_ *ui.TextInput) { wizard.smtpPassword.Set(wizard.imapPassword.String()) wizard.imapUri() wizard.smtpUri() - lastChange = time.Now() + }) + wizard.imapPassword.OnFocusLost(func(_ *ui.TextInput) { once.Do(func() { - // debounce to ensure pasted passwords are pasted completely - go func() { - defer log.PanicHandler() - for !time.Now().After(lastChange.Add(10 * time.Millisecond)) { - <-time.After(10 * time.Millisecond) - } - showPasswordWarning(aerc) - }() + showPasswordWarning(aerc) }) }) wizard.smtpServer.OnChange(func(_ *ui.TextInput) { -- cgit v1.2.3-54-g00ecf