summaryrefslogtreecommitdiffstats
path: root/pkg/gui/credentials_panel.go
diff options
context:
space:
mode:
authorJesse Duffield <jessedduffield@gmail.com>2019-02-11 21:02:53 +1100
committerJesse Duffield <jessedduffield@gmail.com>2019-02-11 21:02:53 +1100
commit3d343e9b574a2c99ebf5b30dc9a4dac2886f6d73 (patch)
treeef6b2f8c08a29349bcc56a16260dfefdb3ee872d /pkg/gui/credentials_panel.go
parenta3656154906c1117f9c9bbe100aa585e43417897 (diff)
parent3a607061a2303d9f45d308de652fbebe7300b43c (diff)
Merge branch 'master' into feature/rebasing
Diffstat (limited to 'pkg/gui/credentials_panel.go')
-rw-r--r--pkg/gui/credentials_panel.go104
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)
+ }
+}