Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
diamondburned
GitHub Repository: diamondburned/gtkcord4
Path: blob/main/internal/window/login/rememberme.go
452 views
1
package login
2
3
import (
4
"context"
5
6
"github.com/diamondburned/chatkit/components/secretdialog"
7
"github.com/diamondburned/chatkit/kits/secret"
8
"github.com/diamondburned/gotk4/pkg/gtk/v4"
9
"github.com/diamondburned/gotkit/gtkutil/cssutil"
10
)
11
12
type rememberMeBox struct {
13
*gtk.CheckButton
14
driver secret.Driver
15
}
16
17
var rememberMeCSS = cssutil.Applier("login-rememberme", `
18
.login-rememberme {
19
margin-bottom: 4px;
20
}
21
`)
22
23
func newRememberMeBox(ctx context.Context) *rememberMeBox {
24
b := rememberMeBox{}
25
26
keyring := secret.KeyringDriver(ctx)
27
28
b.CheckButton = gtk.NewCheckButtonWithLabel("Remember Account")
29
b.CheckButton.AddCSSClass("login-rememberme")
30
b.CheckButton.ConnectToggled(func() {
31
if !b.Active() {
32
b.driver = nil
33
return
34
}
35
36
if keyring.IsAvailable() {
37
b.driver = keyring
38
return
39
}
40
41
secretdialog.PromptPassword(
42
ctx, secretdialog.PromptEncrypt,
43
func(ok bool, enc *secret.EncryptedFile) {
44
if !ok {
45
// User didn't want this, so untick the box.
46
b.SetActive(false)
47
} else {
48
b.driver = enc
49
}
50
},
51
)
52
})
53
54
return &b
55
}
56
57
// SecretDriver returns the secret driver if the user opts to remember the
58
// session.
59
func (b *rememberMeBox) SecretDriver() secret.Driver {
60
return b.driver
61
}
62
63