|
@@ -19,6 +19,7 @@ import (
|
19
|
19
|
"github.com/oragono/oragono/irc/connection_limits"
|
20
|
20
|
"github.com/oragono/oragono/irc/email"
|
21
|
21
|
"github.com/oragono/oragono/irc/ldap"
|
|
22
|
+ "github.com/oragono/oragono/irc/modes"
|
22
|
23
|
"github.com/oragono/oragono/irc/passwd"
|
23
|
24
|
"github.com/oragono/oragono/irc/utils"
|
24
|
25
|
"github.com/tidwall/buntdb"
|
|
@@ -40,6 +41,7 @@ const (
|
40
|
41
|
keyAccountChannels = "account.channels %s" // channels registered to the account
|
41
|
42
|
keyAccountJoinedChannels = "account.joinedto %s" // channels a persistent client has joined
|
42
|
43
|
keyAccountLastSeen = "account.lastseen %s"
|
|
44
|
+ keyAccountModes = "account.modes %s" // user modes for the always-on client as a string
|
43
|
45
|
|
44
|
46
|
keyVHostQueueAcctToId = "vhostQueue %s"
|
45
|
47
|
vhostRequestIdx = "vhostQueue"
|
|
@@ -127,7 +129,7 @@ func (am *AccountManager) createAlwaysOnClients(config *Config) {
|
127
|
129
|
account, err := am.LoadAccount(accountName)
|
128
|
130
|
if err == nil && account.Verified &&
|
129
|
131
|
persistenceEnabled(config.Accounts.Multiclient.AlwaysOn, account.Settings.AlwaysOn) {
|
130
|
|
- am.server.AddAlwaysOnClient(account, am.loadChannels(accountName), am.loadLastSeen(accountName))
|
|
132
|
+ am.server.AddAlwaysOnClient(account, am.loadChannels(accountName), am.loadLastSeen(accountName), am.loadModes(accountName))
|
131
|
133
|
}
|
132
|
134
|
}
|
133
|
135
|
}
|
|
@@ -594,6 +596,28 @@ func (am *AccountManager) loadChannels(account string) (channels []string) {
|
594
|
596
|
return
|
595
|
597
|
}
|
596
|
598
|
|
|
599
|
+func (am *AccountManager) saveModes(account string, uModes modes.Modes) {
|
|
600
|
+ modeStr := uModes.String()
|
|
601
|
+ key := fmt.Sprintf(keyAccountModes, account)
|
|
602
|
+ am.server.store.Update(func(tx *buntdb.Tx) error {
|
|
603
|
+ tx.Set(key, modeStr, nil)
|
|
604
|
+ return nil
|
|
605
|
+ })
|
|
606
|
+}
|
|
607
|
+
|
|
608
|
+func (am *AccountManager) loadModes(account string) (uModes modes.Modes) {
|
|
609
|
+ key := fmt.Sprintf(keyAccountModes, account)
|
|
610
|
+ var modeStr string
|
|
611
|
+ am.server.store.View(func(tx *buntdb.Tx) error {
|
|
612
|
+ modeStr, _ = tx.Get(key)
|
|
613
|
+ return nil
|
|
614
|
+ })
|
|
615
|
+ for _, m := range modeStr {
|
|
616
|
+ uModes = append(uModes, modes.Mode(m))
|
|
617
|
+ }
|
|
618
|
+ return
|
|
619
|
+}
|
|
620
|
+
|
597
|
621
|
func (am *AccountManager) saveLastSeen(account string, lastSeen time.Time) {
|
598
|
622
|
key := fmt.Sprintf(keyAccountLastSeen, account)
|
599
|
623
|
var val string
|