diff options
author | Jesse Duffield <jessedduffield@gmail.com> | 2019-02-11 21:02:53 +1100 |
---|---|---|
committer | Jesse Duffield <jessedduffield@gmail.com> | 2019-02-11 21:02:53 +1100 |
commit | 3d343e9b574a2c99ebf5b30dc9a4dac2886f6d73 (patch) | |
tree | ef6b2f8c08a29349bcc56a16260dfefdb3ee872d /pkg/gui/credentials_panel.go | |
parent | a3656154906c1117f9c9bbe100aa585e43417897 (diff) | |
parent | 3a607061a2303d9f45d308de652fbebe7300b43c (diff) |
Merge branch 'master' into feature/rebasing
Diffstat (limited to 'pkg/gui/credentials_panel.go')
-rw-r--r-- | pkg/gui/credentials_panel.go | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/pkg/gui/credentials_panel.go b/pkg/gui/credentials_panel.go new file mode 100644 index 000000000..bc894c422 --- /dev/null +++ b/pkg/gui/credentials_panel.go @@ -0,0 +1,104 @@ +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 + "\n" +} + +func (gui *Gui) handleSubmitCredential(g *gocui.Gui, v *gocui.View) error { + message := gui.trimmedContent(v) + 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, "Invalid username or password") { + 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) + } +} |