|
@@ -13,6 +13,7 @@ import (
|
13
|
13
|
|
14
|
14
|
"github.com/ergochat/irc-go/ircfmt"
|
15
|
15
|
|
|
16
|
+ "github.com/ergochat/ergo/irc/caps"
|
16
|
17
|
"github.com/ergochat/ergo/irc/custime"
|
17
|
18
|
"github.com/ergochat/ergo/irc/passwd"
|
18
|
19
|
"github.com/ergochat/ergo/irc/sno"
|
|
@@ -1028,6 +1029,8 @@ func nsRegisterHandler(service *ircService, server *Server, client *Client, comm
|
1028
|
1029
|
}
|
1029
|
1030
|
|
1030
|
1031
|
func nsSaregisterHandler(service *ircService, server *Server, client *Client, command string, params []string, rb *ResponseBuffer) {
|
|
1032
|
+ registerCap := rb.session.capabilities.Has(caps.AccountRegistration)
|
|
1033
|
+
|
1031
|
1034
|
var account, passphrase string
|
1032
|
1035
|
account = params[0]
|
1033
|
1036
|
if 1 < len(params) && params[1] != "*" {
|
|
@@ -1037,19 +1040,30 @@ func nsSaregisterHandler(service *ircService, server *Server, client *Client, co
|
1037
|
1040
|
|
1038
|
1041
|
if err != nil {
|
1039
|
1042
|
var errMsg string
|
|
1043
|
+ var failCode string
|
1040
|
1044
|
if err == errAccountAlreadyRegistered || err == errAccountAlreadyVerified {
|
1041
|
1045
|
errMsg = client.t("Account already exists")
|
|
1046
|
+ failCode = "USERNAME_EXISTS"
|
1042
|
1047
|
} else if err == errNameReserved {
|
1043
|
1048
|
errMsg = client.t(err.Error())
|
|
1049
|
+ failCode = "USERNAME_EXISTS"
|
1044
|
1050
|
} else if err == errAccountBadPassphrase {
|
1045
|
1051
|
errMsg = client.t("Passphrase contains forbidden characters or is otherwise invalid")
|
|
1052
|
+ failCode = "INVALID_PASSWORD"
|
1046
|
1053
|
} else {
|
1047
|
1054
|
server.logger.Error("services", "unknown error from saregister", err.Error())
|
1048
|
|
- errMsg = client.t("Could not register")
|
|
1055
|
+ errMsg = fmt.Sprintf(client.t("Could not register: %v"), err)
|
|
1056
|
+ failCode = "UNKNOWN_ERROR"
|
1049
|
1057
|
}
|
1050
|
1058
|
service.Notice(rb, errMsg)
|
|
1059
|
+ if registerCap {
|
|
1060
|
+ rb.Add(nil, server.name, "FAIL", "REGISTER", failCode, utils.SafeErrorParam(account), err.Error())
|
|
1061
|
+ }
|
1051
|
1062
|
} else {
|
1052
|
1063
|
service.Notice(rb, fmt.Sprintf(client.t("Successfully registered account %s"), account))
|
|
1064
|
+ if registerCap {
|
|
1065
|
+ rb.Add(nil, server.name, "REGISTER", "SUCCESS", account, client.t("Account successfully registered"))
|
|
1066
|
+ }
|
1053
|
1067
|
server.snomasks.Send(sno.LocalAccounts, fmt.Sprintf(ircfmt.Unescape("Operator $c[grey][$r%s$c[grey]] registered account $c[grey][$r%s$c[grey]] with SAREGISTER"), client.Oper().Name, account))
|
1054
|
1068
|
}
|
1055
|
1069
|
}
|