mirror of
https://github.com/ergochat/ergo.git
synced 2024-11-22 20:09:41 +01:00
implement NS PASSWD for password changes
This commit is contained in:
parent
70364f5f67
commit
48f9b5e4fa
@ -565,14 +565,15 @@ func (am *AccountManager) SetNickReserved(client *Client, nick string, saUnreser
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (am *AccountManager) AuthenticateByPassphrase(client *Client, accountName string, passphrase string) error {
|
func (am *AccountManager) checkPassphrase(accountName, passphrase string) (account ClientAccount, err error) {
|
||||||
account, err := am.LoadAccount(accountName)
|
account, err = am.LoadAccount(accountName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !account.Verified {
|
if !account.Verified {
|
||||||
return errAccountUnverified
|
err = errAccountUnverified
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
switch account.Credentials.Version {
|
switch account.Credentials.Version {
|
||||||
@ -583,9 +584,13 @@ func (am *AccountManager) AuthenticateByPassphrase(client *Client, accountName s
|
|||||||
default:
|
default:
|
||||||
err = errAccountInvalidCredentials
|
err = errAccountInvalidCredentials
|
||||||
}
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (am *AccountManager) AuthenticateByPassphrase(client *Client, accountName string, passphrase string) error {
|
||||||
|
account, err := am.checkPassphrase(accountName, passphrase)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errAccountInvalidCredentials
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
am.Login(client, account)
|
am.Login(client, account)
|
||||||
|
@ -121,6 +121,18 @@ or other verification.`,
|
|||||||
helpShort: `$bVERIFY$b lets you complete account registration.`,
|
helpShort: `$bVERIFY$b lets you complete account registration.`,
|
||||||
enabled: servCmdRequiresAccreg,
|
enabled: servCmdRequiresAccreg,
|
||||||
},
|
},
|
||||||
|
"passwd": {
|
||||||
|
handler: nsPasswdHandler,
|
||||||
|
help: `Syntax: $bPASSWD <current> <new> <new_again>$b
|
||||||
|
Or: $bPASSWD <username> <new>$b
|
||||||
|
|
||||||
|
PASSWD lets you change your account password. You must supply your current
|
||||||
|
password and confirm the new one by typing it twice. If you're an IRC operator
|
||||||
|
with the correct permissions, you can use PASSWD to reset someone else's
|
||||||
|
password by supplying their username and then the desired password.`,
|
||||||
|
helpShort: `$bPASSWD$b lets you change your password.`,
|
||||||
|
enabled: servCmdRequiresAuthEnabled,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -389,3 +401,49 @@ func nsVerifyHandler(server *Server, client *Client, command, params string, rb
|
|||||||
|
|
||||||
sendSuccessfulRegResponse(client, rb, true)
|
sendSuccessfulRegResponse(client, rb, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func nsPasswdHandler(server *Server, client *Client, command, params string, rb *ResponseBuffer) {
|
||||||
|
var target string
|
||||||
|
var newPassword string
|
||||||
|
var errorMessage string
|
||||||
|
|
||||||
|
fields := strings.Fields(params)
|
||||||
|
switch len(fields) {
|
||||||
|
case 2:
|
||||||
|
if !client.HasRoleCapabs("accreg") {
|
||||||
|
errorMessage = "Insufficient privileges"
|
||||||
|
} else {
|
||||||
|
target, newPassword = fields[0], fields[1]
|
||||||
|
}
|
||||||
|
case 3:
|
||||||
|
target = client.Account()
|
||||||
|
if target == "" {
|
||||||
|
errorMessage = "You're not logged into an account"
|
||||||
|
} else if fields[1] != fields[2] {
|
||||||
|
errorMessage = "Passwords do not match"
|
||||||
|
} else {
|
||||||
|
// check that they correctly supplied the preexisting password
|
||||||
|
_, err := server.accounts.checkPassphrase(target, fields[0])
|
||||||
|
if err != nil {
|
||||||
|
errorMessage = "Password incorrect"
|
||||||
|
} else {
|
||||||
|
newPassword = fields[1]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
errorMessage = "Invalid parameters"
|
||||||
|
}
|
||||||
|
|
||||||
|
if errorMessage != "" {
|
||||||
|
nsNotice(rb, client.t(errorMessage))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
err := server.accounts.setPassword(target, newPassword)
|
||||||
|
if err == nil {
|
||||||
|
nsNotice(rb, client.t("Password changed"))
|
||||||
|
} else {
|
||||||
|
server.logger.Error("internal", fmt.Sprintf("could not upgrade user password: %v", err))
|
||||||
|
nsNotice(rb, client.t("Password could not be changed due to server error"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user