mirror of
https://github.com/jeremyd/ergo.git
synced 2026-06-12 15:53:31 -07:00
accounts: Login to accounts properly
Avoids letting clients login to two accounts at once
This commit is contained in:
@@ -22,6 +22,7 @@ New release of Oragono!
|
||||
### Removed
|
||||
|
||||
### Fixed
|
||||
* Fixed an account issue where clients could login to multiple accounts at once.
|
||||
|
||||
|
||||
## [0.6.0] - 2017-01-19
|
||||
|
||||
+22
-4
@@ -222,8 +222,7 @@ func authPlainHandler(server *Server, client *Client, mechanism string, value []
|
||||
account = loadAccount(server, tx, accountKey)
|
||||
}
|
||||
|
||||
account.Clients = append(account.Clients, client)
|
||||
client.account = account
|
||||
client.LoginToAccount(account)
|
||||
|
||||
return err
|
||||
})
|
||||
@@ -237,6 +236,26 @@ func authPlainHandler(server *Server, client *Client, mechanism string, value []
|
||||
return false
|
||||
}
|
||||
|
||||
// LoginToAccount logs the client into the given account.
|
||||
func (client *Client) LoginToAccount(account *ClientAccount) {
|
||||
if client.account == account {
|
||||
// already logged into this acct, no changing necessary
|
||||
return
|
||||
} else if client.account != nil {
|
||||
// logout of existing acct
|
||||
var newClientAccounts []*Client
|
||||
for _, c := range account.Clients {
|
||||
if c != client {
|
||||
newClientAccounts = append(newClientAccounts, c)
|
||||
}
|
||||
}
|
||||
account.Clients = newClientAccounts
|
||||
}
|
||||
|
||||
account.Clients = append(account.Clients, client)
|
||||
client.account = account
|
||||
}
|
||||
|
||||
// authExternalHandler parses the SASL EXTERNAL mechanism.
|
||||
func authExternalHandler(server *Server, client *Client, mechanism string, value []byte) bool {
|
||||
if client.certfp == "" {
|
||||
@@ -275,8 +294,7 @@ func authExternalHandler(server *Server, client *Client, mechanism string, value
|
||||
account = loadAccount(server, tx, accountKey)
|
||||
}
|
||||
|
||||
account.Clients = append(account.Clients, client)
|
||||
client.account = account
|
||||
client.LoginToAccount(account)
|
||||
|
||||
return nil
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user