forked from External/ergo
enforce nick protection immediately after verification
This commit is contained in:
parent
7929d82e09
commit
d6e3f188cf
2 changed files with 18 additions and 1 deletions
|
|
@ -750,6 +750,7 @@ func (am *AccountManager) dispatchMailtoCallback(client *Client, casefoldedAccou
|
|||
|
||||
func (am *AccountManager) Verify(client *Client, account string, code string) error {
|
||||
casefoldedAccount, err := CasefoldName(account)
|
||||
var skeleton string
|
||||
if err != nil || account == "" || account == "*" {
|
||||
return errAccountVerificationFailed
|
||||
}
|
||||
|
|
@ -820,7 +821,7 @@ func (am *AccountManager) Verify(client *Client, account string, code string) er
|
|||
})
|
||||
|
||||
if err == nil {
|
||||
skeleton, _ := Skeleton(raw.Name)
|
||||
skeleton, _ = Skeleton(raw.Name)
|
||||
am.Lock()
|
||||
am.nickToAccount[casefoldedAccount] = casefoldedAccount
|
||||
am.skeletonToAccount[skeleton] = casefoldedAccount
|
||||
|
|
@ -845,6 +846,18 @@ func (am *AccountManager) Verify(client *Client, account string, code string) er
|
|||
if client != nil {
|
||||
am.Login(client, clientAccount)
|
||||
}
|
||||
_, method := am.EnforcementStatus(casefoldedAccount, skeleton)
|
||||
if method != NickEnforcementNone {
|
||||
currentClient := am.server.clients.Get(casefoldedAccount)
|
||||
if currentClient == nil || currentClient == client || currentClient.Account() == casefoldedAccount {
|
||||
return nil
|
||||
}
|
||||
if method == NickEnforcementStrict {
|
||||
am.server.RandomlyRename(currentClient)
|
||||
} else if method == NickEnforcementWithTimeout {
|
||||
currentClient.nickTimer.Touch(nil)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue