mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-11-20 17:22:23 +03:00
Most of our prompts don't (shouldn't) allow empty input, but most callers didn't check, and would run into cryptic errors when the user pressed enter at an empty prompt (e.g. when creating a new branch). Now we simply don't allow hitting enter in this case, and show an error toast instead. This behavior is opt-out, because there are a few cases where empty input is supported (e.g. creating a stash).
70 lines
1.8 KiB
Go
70 lines
1.8 KiB
Go
package helpers
|
|
|
|
import (
|
|
"github.com/jesseduffield/lazygit/pkg/commands/oscommands"
|
|
"github.com/jesseduffield/lazygit/pkg/gui/types"
|
|
)
|
|
|
|
type CredentialsHelper struct {
|
|
c *HelperCommon
|
|
}
|
|
|
|
func NewCredentialsHelper(
|
|
c *HelperCommon,
|
|
) *CredentialsHelper {
|
|
return &CredentialsHelper{
|
|
c: c,
|
|
}
|
|
}
|
|
|
|
// promptUserForCredential wait for a username, password or passphrase input from the credentials popup
|
|
// We return a channel rather than returning the string directly so that the calling function knows
|
|
// when the prompt has been created (before the user has entered anything) so that it can
|
|
// note that we're now waiting on user input and lazygit isn't processing anything.
|
|
func (self *CredentialsHelper) PromptUserForCredential(passOrUname oscommands.CredentialType) <-chan string {
|
|
ch := make(chan string)
|
|
|
|
self.c.OnUIThread(func() error {
|
|
title, mask := self.getTitleAndMask(passOrUname)
|
|
|
|
self.c.Prompt(types.PromptOpts{
|
|
Title: title,
|
|
Mask: mask,
|
|
HandleConfirm: func(input string) error {
|
|
ch <- input + "\n"
|
|
|
|
self.c.Refresh(types.RefreshOptions{Mode: types.ASYNC})
|
|
return nil
|
|
},
|
|
HandleClose: func() error {
|
|
ch <- "\n"
|
|
|
|
return nil
|
|
},
|
|
AllowEmptyInput: true,
|
|
})
|
|
|
|
return nil
|
|
})
|
|
|
|
return ch
|
|
}
|
|
|
|
func (self *CredentialsHelper) getTitleAndMask(passOrUname oscommands.CredentialType) (string, bool) {
|
|
switch passOrUname {
|
|
case oscommands.Username:
|
|
return self.c.Tr.CredentialsUsername, false
|
|
case oscommands.Password:
|
|
return self.c.Tr.CredentialsPassword, true
|
|
case oscommands.Passphrase:
|
|
return self.c.Tr.CredentialsPassphrase, true
|
|
case oscommands.PIN:
|
|
return self.c.Tr.CredentialsPIN, true
|
|
case oscommands.Token:
|
|
return self.c.Tr.CredentialsToken, true
|
|
}
|
|
|
|
// should never land here
|
|
panic("unexpected credential request")
|
|
}
|