diff options
author | Jesse Duffield <jessedduffield@gmail.com> | 2018-12-18 22:19:32 +1100 |
---|---|---|
committer | Jesse Duffield <jessedduffield@gmail.com> | 2018-12-18 22:19:32 +1100 |
commit | 865c7c2332d71704b8a6bc22472313daf4997f16 (patch) | |
tree | a21ca94ab87395f99e7ea537e3ad95eb177c4511 /pkg/gui/credentials_panel.go | |
parent | 11c7cbe3ac2adf4f6e717640df7a49e5a916d753 (diff) |
minor refactor of credentials panel into its own file
Diffstat (limited to 'pkg/gui/credentials_panel.go')
-rw-r--r-- | pkg/gui/credentials_panel.go | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/pkg/gui/credentials_panel.go b/pkg/gui/credentials_panel.go new file mode 100644 index 000000000..6c8f8b4ef --- /dev/null +++ b/pkg/gui/credentials_panel.go @@ -0,0 +1,108 @@ +package gui + +import ( + "strings" + + "github.com/jesseduffield/gocui" +) + +type credentials chan string + +// waitForPassUname wait for a username or password input from the credentials popup +func (gui *Gui) waitForPassUname(g *gocui.Gui, currentView *gocui.View, passOrUname string) string { + gui.credentials = make(chan string) + g.Update(func(g *gocui.Gui) error { + credentialsView, _ := g.View("credentials") + if passOrUname == "username" { + credentialsView.Title = gui.Tr.SLocalize("CredentialsUsername") + credentialsView.Mask = 0 + } else { + credentialsView.Title = gui.Tr.SLocalize("CredentialsPassword") + credentialsView.Mask = '*' + } + err := gui.switchFocus(g, currentView, credentialsView) + if err != nil { + return err + } + gui.RenderCommitLength() + return nil + }) + + // wait for username/passwords input + userInput := <-gui.credentials + return userInput +} + +func (gui *Gui) handleSubmitCredential(g *gocui.Gui, v *gocui.View) error { + message := gui.trimmedContent(v) + if message == "" { + // sending an obviously incorrect password so that the program isn't stuck waiting + message = "-" + } + gui.credentials <- message + err := gui.refreshFiles(g) + if err != nil { + return err + } + v.Clear() + err = v.SetCursor(0, 0) + if err != nil { + return err + } + _, err = g.SetViewOnBottom("credentials") + if err != nil { + return err + } + nextView, err := gui.g.View("confirmation") + if err != nil { + nextView = gui.getFilesView(g) + } + err = gui.switchFocus(g, nil, nextView) + if err != nil { + return err + } + return gui.refreshCommits(g) +} + +func (gui *Gui) handleCloseCredentialsView(g *gocui.Gui, v *gocui.View) error { + _, err := g.SetViewOnBottom("credentials") + if err != nil { + return err + } + + gui.credentials <- "-" + return gui.switchFocus(g, nil, gui.getFilesView(g)) +} + +func (gui *Gui) handleCredentialsViewFocused(g *gocui.Gui, v *gocui.View) error { + if _, err := g.SetViewOnTop("credentials"); err != nil { + return err + } + + message := gui.Tr.TemplateLocalize( + "CloseConfirm", + Teml{ + "keyBindClose": "esc", + "keyBindConfirm": "enter", + }, + ) + return gui.renderString(g, "options", message) +} + +// HandleCredentialsPopup handles the views after executing a command that might ask for credentials +func (gui *Gui) HandleCredentialsPopup(g *gocui.Gui, popupOpened bool, cmdErr error) { + if popupOpened { + _, _ = gui.g.SetViewOnBottom("credentials") + } + if cmdErr != nil { + errMessage := cmdErr.Error() + if strings.Contains(errMessage, "exit status 128") { + errMessage = gui.Tr.SLocalize("PassUnameWrong") + } + // we are not logging this error because it may contain a password + _ = gui.createSpecificErrorPanel(errMessage, gui.getFilesView(gui.g), false) + } else { + _ = gui.closeConfirmationPrompt(g) + _ = gui.refreshSidePanels(g) + } +} |