|
@@ -17,17 +17,18 @@ import (
|
17
|
17
|
)
|
18
|
18
|
|
19
|
19
|
var (
|
20
|
|
- // anything added here MUST be skeleton'd:
|
21
|
|
- restrictedNicknames = map[string]bool{
|
22
|
|
- "=scene=": true, // used for rp commands
|
23
|
|
- "histserv": true, // TODO(slingamn) this should become a real service
|
|
20
|
+ restrictedNicknames = []string{
|
|
21
|
+ "=scene=", // used for rp commands
|
|
22
|
+ "HistServ", // used to play back JOIN, PART, etc. to legacy clients
|
24
|
23
|
}
|
|
24
|
+
|
|
25
|
+ restrictedCasefoldedNicks = make(map[string]bool)
|
|
26
|
+ restrictedSkeletons = make(map[string]bool)
|
25
|
27
|
)
|
26
|
28
|
|
27
|
29
|
// returns whether the change succeeded or failed
|
28
|
30
|
func performNickChange(server *Server, client *Client, target *Client, session *Session, newnick string, rb *ResponseBuffer) bool {
|
29
|
31
|
nickname := strings.TrimSpace(newnick)
|
30
|
|
- skeleton, err := Skeleton(nickname)
|
31
|
32
|
currentNick := client.Nick()
|
32
|
33
|
|
33
|
34
|
if len(nickname) < 1 {
|
|
@@ -35,11 +36,6 @@ func performNickChange(server *Server, client *Client, target *Client, session *
|
35
|
36
|
return false
|
36
|
37
|
}
|
37
|
38
|
|
38
|
|
- if err != nil || len(nickname) > server.Config().Limits.NickLen || restrictedNicknames[skeleton] {
|
39
|
|
- rb.Add(nil, server.name, ERR_ERRONEUSNICKNAME, currentNick, nickname, client.t("Erroneous nickname"))
|
40
|
|
- return false
|
41
|
|
- }
|
42
|
|
-
|
43
|
39
|
if target.Nick() == nickname {
|
44
|
40
|
return true
|
45
|
41
|
}
|
|
@@ -47,15 +43,17 @@ func performNickChange(server *Server, client *Client, target *Client, session *
|
47
|
43
|
hadNick := target.HasNick()
|
48
|
44
|
origNickMask := target.NickMaskString()
|
49
|
45
|
details := target.Details()
|
50
|
|
- err = client.server.clients.SetNick(target, session, nickname)
|
|
46
|
+ err := client.server.clients.SetNick(target, session, nickname)
|
51
|
47
|
if err == errNicknameInUse {
|
52
|
48
|
rb.Add(nil, server.name, ERR_NICKNAMEINUSE, currentNick, nickname, client.t("Nickname is already in use"))
|
53
|
|
- return false
|
54
|
49
|
} else if err == errNicknameReserved {
|
55
|
50
|
rb.Add(nil, server.name, ERR_NICKNAMEINUSE, currentNick, nickname, client.t("Nickname is reserved by a different account"))
|
56
|
|
- return false
|
|
51
|
+ } else if err == errNicknameInvalid {
|
|
52
|
+ rb.Add(nil, server.name, ERR_ERRONEUSNICKNAME, currentNick, nickname, client.t("Erroneous nickname"))
|
57
|
53
|
} else if err != nil {
|
58
|
54
|
rb.Add(nil, server.name, ERR_UNKNOWNERROR, currentNick, "NICK", fmt.Sprintf(client.t("Could not set or change nickname: %s"), err.Error()))
|
|
55
|
+ }
|
|
56
|
+ if err != nil {
|
59
|
57
|
return false
|
60
|
58
|
}
|
61
|
59
|
|
|
@@ -68,7 +66,7 @@ func performNickChange(server *Server, client *Client, target *Client, session *
|
68
|
66
|
}
|
69
|
67
|
histItem.Params[0] = nickname
|
70
|
68
|
|
71
|
|
- client.server.logger.Debug("nick", fmt.Sprintf("%s changed nickname to %s [%s]", origNickMask, nickname, skeleton))
|
|
69
|
+ client.server.logger.Debug("nick", fmt.Sprintf("%s changed nickname to %s [%s]", origNickMask, nickname, client.NickCasefolded()))
|
72
|
70
|
if hadNick {
|
73
|
71
|
if client == target {
|
74
|
72
|
target.server.snomasks.Send(sno.LocalNicks, fmt.Sprintf(ircfmt.Unescape("$%s$r changed nickname to %s"), details.nick, nickname))
|