diff options
Diffstat (limited to 'pkg/gui/controllers/helpers/credentials_helper.go')
-rw-r--r-- | pkg/gui/controllers/helpers/credentials_helper.go | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/pkg/gui/controllers/helpers/credentials_helper.go b/pkg/gui/controllers/helpers/credentials_helper.go new file mode 100644 index 000000000..9da3a46a2 --- /dev/null +++ b/pkg/gui/controllers/helpers/credentials_helper.go @@ -0,0 +1,68 @@ +package helpers + +import ( + "sync" + + "github.com/jesseduffield/lazygit/pkg/commands/oscommands" + "github.com/jesseduffield/lazygit/pkg/gui/types" +) + +type CredentialsHelper struct { + c *types.HelperCommon +} + +func NewCredentialsHelper( + c *types.HelperCommon, +) *CredentialsHelper { + return &CredentialsHelper{ + c: c, + } +} + +// promptUserForCredential wait for a username, password or passphrase input from the credentials popup +func (self *CredentialsHelper) PromptUserForCredential(passOrUname oscommands.CredentialType) string { + waitGroup := sync.WaitGroup{} + waitGroup.Add(1) + + userInput := "" + + self.c.OnUIThread(func() error { + title, mask := self.getTitleAndMask(passOrUname) + + return self.c.Prompt(types.PromptOpts{ + Title: title, + Mask: mask, + HandleConfirm: func(input string) error { + userInput = input + + waitGroup.Done() + + return self.c.Refresh(types.RefreshOptions{Mode: types.ASYNC}) + }, + HandleClose: func() error { + waitGroup.Done() + + return nil + }, + }) + }) + + // wait for username/passwords/passphrase input + waitGroup.Wait() + + return userInput + "\n" +} + +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 + } + + // should never land here + panic("unexpected credential request") +} |