diff --git a/irc/accounts.go b/irc/accounts.go index f98eaada..6a2ddd60 100644 --- a/irc/accounts.go +++ b/irc/accounts.go @@ -1361,6 +1361,7 @@ func (am *AccountManager) Unregister(account string, erase bool) error { lastSeenKey := fmt.Sprintf(keyAccountLastSeen, casefoldedAccount) unregisteredKey := fmt.Sprintf(keyAccountUnregistered, casefoldedAccount) modesKey := fmt.Sprintf(keyAccountModes, casefoldedAccount) + realnameKey := fmt.Sprintf(keyAccountRealname, casefoldedAccount) var clients []*Client defer func() { @@ -1419,6 +1420,7 @@ func (am *AccountManager) Unregister(account string, erase bool) error { tx.Delete(joinedChannelsKey) tx.Delete(lastSeenKey) tx.Delete(modesKey) + tx.Delete(realnameKey) _, err := tx.Delete(vhostQueueKey) am.decrementVHostQueueCount(casefoldedAccount, err) diff --git a/irc/database.go b/irc/database.go index c2989a22..8b1c231c 100644 --- a/irc/database.go +++ b/irc/database.go @@ -24,7 +24,7 @@ const ( // 'version' of the database schema keySchemaVersion = "db.version" // latest schema of the db - latestDbSchema = "15" + latestDbSchema = "16" keyCloakSecret = "crypto.cloak_secret" ) @@ -812,6 +812,29 @@ func schemaChangeV14ToV15(config *Config, tx *buntdb.Tx) error { return nil } +// #1330: delete any stale realname records +func schemaChangeV15ToV16(config *Config, tx *buntdb.Tx) error { + prefix := "account.realname " + verifiedPrefix := "account.verified " + var keys []string + tx.AscendGreaterOrEqual("", prefix, func(key, value string) bool { + if !strings.HasPrefix(key, prefix) { + return false + } + acct := strings.TrimPrefix(key, prefix) + verifiedKey := verifiedPrefix + acct + _, verifiedErr := tx.Get(verifiedKey) + if verifiedErr != nil { + keys = append(keys, key) + } + return true + }) + for _, key := range keys { + tx.Delete(key) + } + return nil +} + func init() { allChanges := []SchemaChange{ { @@ -884,6 +907,11 @@ func init() { TargetVersion: "15", Changer: schemaChangeV14ToV15, }, + { + InitialVersion: "15", + TargetVersion: "16", + Changer: schemaChangeV15ToV16, + }, } // build the index