3
0
mirror of https://github.com/ergochat/ergo.git synced 2024-11-13 07:29:30 +01:00

Read account names and additional nicknames from the db to avoid casefolding issues.

This commit is contained in:
Alex Jaspersen 2020-05-04 02:14:55 +00:00
parent 6019ed1e29
commit 73bea0168d

View File

@ -7,6 +7,7 @@ import (
"bytes" "bytes"
"encoding/json" "encoding/json"
"fmt" "fmt"
"sort"
"strconv" "strconv"
"strings" "strings"
"sync" "sync"
@ -1047,15 +1048,37 @@ func (am *AccountManager) AuthenticateByPassphrase(client *Client, accountName s
return err return err
} }
func (am *AccountManager) AllNicks() []string { // AllNicks returns the uncasefolded nicknames for all accounts, including additional (grouped) nicks.
am.RLock() func (am *AccountManager) AllNicks() (result []string) {
defer am.RUnlock() // Account names
accountNamePrefix := fmt.Sprintf(keyAccountName, "")
am.server.store.View(func(tx *buntdb.Tx) error {
return tx.AscendGreaterOrEqual("", accountNamePrefix, func(key, value string) bool {
if !strings.HasPrefix(key, accountNamePrefix) {
return false
}
result = append(result, value)
return true
})
})
nicks := make([]string, 0, len(am.nickToAccount)) // Additional nicknames
for nick := range am.nickToAccount { accountAdditionalNicksPrefix := fmt.Sprintf(keyAccountAdditionalNicks, "")
nicks = append(nicks, nick) am.server.store.View(func(tx *buntdb.Tx) error {
} return tx.AscendGreaterOrEqual("", accountAdditionalNicksPrefix, func(key, value string) bool {
return nicks if !strings.HasPrefix(key, accountAdditionalNicksPrefix) {
return false
}
additionalNicks := unmarshalReservedNicks(value)
for _, additionalNick := range additionalNicks {
result = append(result, additionalNick)
}
return true
})
})
sort.Strings(result)
return
} }
func (am *AccountManager) LoadAccount(accountName string) (result ClientAccount, err error) { func (am *AccountManager) LoadAccount(accountName string) (result ClientAccount, err error) {