-
Notifications
You must be signed in to change notification settings - Fork 1
/
login.go
70 lines (56 loc) · 1.58 KB
/
login.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package ui
import (
"github.com/darkhz/rclone-tui/rclone"
"github.com/darkhz/tview"
"github.com/gdamore/tcell/v2"
)
// LoginUI stores the authentication parameters.
type LoginUI struct {
params map[string]string
}
var login LoginUI
// LoginScreen displays a login screen to enter authentication information.
func LoginScreen() {
var modal *Modal
setData := func(name string, data interface{}) {
if login.params == nil {
login.params = make(map[string]string)
}
login.params[name] = data.(string)
}
form := NewForm()
form.SetButtonsAlign(tview.AlignCenter)
form.AddFormItem(
GetFormInputField("Host", true, false, setData, func(label string) {}),
)
form.AddFormItem(
GetFormInputField("User", true, false, setData, func(label string) {}),
)
form.AddFormItem(
GetFormInputField("Password", true, true, setData, func(label string) {}),
)
form.AddButton("Login", func() {
if login.params == nil {
return
}
go func(host, user, pass string) {
StartLoading("Logging in")
userInfo, err := rclone.Login(host, user, pass)
if err != nil {
ErrorMessage("Login", err, struct{}{})
return
}
StopLoading("Logged in")
App.QueueUpdateDraw(func() {
modal.Exit()
MainPage.RemovePage("login")
SetViewHostname(userInfo)
InitViewByName("Dashboard")
})
}(login.params["Host"], login.params["User"], login.params["Password"])
})
SetViewTitle("Login")
MainPage.AddAndSwitchToPage("login", tview.NewBox().SetBackgroundColor(tcell.ColorDefault), true)
modal = NewCustomModal("login_form", form, form.GetFormItemCount()+8, 100)
modal.Show()
}