Преглед на файлове

Merge pull request #1280 from slingamn/issue1277_sanick

fix #1277
tags/v2.4.0-rc1
Shivaram Lingamneni преди 3 години
родител
ревизия
8b01d19336
No account linked to committer's email address
променени са 2 файла, в които са добавени 39 реда и са изтрити 10 реда
  1. 2
    2
      irc/handlers.go
  2. 37
    8
      irc/nickname.go

+ 2
- 2
irc/handlers.go Целия файл

@@ -2594,10 +2594,10 @@ func resumeHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Re
2594 2594
 
2595 2595
 // SANICK <oldnick> <nickname>
2596 2596
 func sanickHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
2597
-	targetNick := strings.TrimSpace(msg.Params[0])
2597
+	targetNick := msg.Params[0]
2598 2598
 	target := server.clients.Get(targetNick)
2599 2599
 	if target == nil {
2600
-		rb.Add(nil, server.name, ERR_NOSUCHNICK, client.nick, msg.Params[0], client.t("No such nick"))
2600
+		rb.Add(nil, server.name, "FAIL", "SANICK", "NO_SUCH_NICKNAME", utils.SafeErrorParam(targetNick), client.t("No such nick"))
2601 2601
 		return false
2602 2602
 	}
2603 2603
 	performNickChange(server, client, target, nil, msg.Params[1], rb)

+ 37
- 8
irc/nickname.go Целия файл

@@ -28,28 +28,57 @@ var (
28 28
 )
29 29
 
30 30
 func performNickChange(server *Server, client *Client, target *Client, session *Session, nickname string, rb *ResponseBuffer) error {
31
-	currentNick := client.Nick()
32 31
 	details := target.Details()
33 32
 	hadNick := details.nick != "*"
34 33
 	origNickMask := details.nickMask
34
+	isSanick := client != target
35 35
 
36 36
 	assignedNickname, err, back := client.server.clients.SetNick(target, session, nickname)
37 37
 	if err == errNicknameInUse {
38
-		rb.Add(nil, server.name, ERR_NICKNAMEINUSE, currentNick, utils.SafeErrorParam(nickname), client.t("Nickname is already in use"))
38
+		if !isSanick {
39
+			rb.Add(nil, server.name, ERR_NICKNAMEINUSE, details.nick, utils.SafeErrorParam(nickname), client.t("Nickname is already in use"))
40
+		} else {
41
+			rb.Add(nil, server.name, "FAIL", "SANICK", "NICKNAME_IN_USE", utils.SafeErrorParam(nickname), client.t("Nickname is already in use"))
42
+		}
39 43
 	} else if err == errNicknameReserved {
40
-		rb.Add(nil, server.name, ERR_NICKNAMEINUSE, currentNick, utils.SafeErrorParam(nickname), client.t("Nickname is reserved by a different account"))
44
+		if !isSanick {
45
+			rb.Add(nil, server.name, ERR_NICKNAMEINUSE, details.nick, utils.SafeErrorParam(nickname), client.t("Nickname is reserved by a different account"))
46
+		} else {
47
+			rb.Add(nil, server.name, "FAIL", "SANICK", "NICKNAME_RESERVED", utils.SafeErrorParam(nickname), client.t("Nickname is reserved by a different account"))
48
+		}
41 49
 	} else if err == errNicknameInvalid {
42
-		rb.Add(nil, server.name, ERR_ERRONEUSNICKNAME, currentNick, utils.SafeErrorParam(nickname), client.t("Erroneous nickname"))
50
+		if !isSanick {
51
+			rb.Add(nil, server.name, ERR_ERRONEUSNICKNAME, details.nick, utils.SafeErrorParam(nickname), client.t("Erroneous nickname"))
52
+		} else {
53
+			rb.Add(nil, server.name, "FAIL", "SANICK", "NICKNAME_INVALID", utils.SafeErrorParam(nickname), client.t("Erroneous nickname"))
54
+		}
43 55
 	} else if err == errNickAccountMismatch {
44 56
 		// this used to use ERR_NICKNAMEINUSE, but it displayed poorly in some clients;
45 57
 		// ERR_UNKNOWNERROR at least has a better chance of displaying our error text
46
-		rb.Add(nil, server.name, ERR_UNKNOWNERROR, currentNick, "NICK", client.t("You must use your account name as your nickname"))
58
+		if !isSanick {
59
+			rb.Add(nil, server.name, ERR_UNKNOWNERROR, details.nick, "NICK", client.t("You must use your account name as your nickname"))
60
+		} else {
61
+			rb.Add(nil, server.name, "FAIL", "SANICK", "UNKNOWN_ERROR", utils.SafeErrorParam(nickname), client.t("This user's nickname and account name need to be equal"))
62
+		}
47 63
 	} else if err == errNickMissing {
48
-		rb.Add(nil, server.name, ERR_NONICKNAMEGIVEN, currentNick, client.t("No nickname given"))
64
+		if !isSanick {
65
+			rb.Add(nil, server.name, ERR_NONICKNAMEGIVEN, details.nick, client.t("No nickname given"))
66
+		} else {
67
+			rb.Add(nil, server.name, "FAIL", "SANICK", "NICKNAME_INVALID", utils.SafeErrorParam(nickname), client.t("No nickname given"))
68
+		}
49 69
 	} else if err == errNoop {
50
-		// no message
70
+		if !isSanick {
71
+			// no message
72
+		} else {
73
+			rb.Add(nil, server.name, "NOTE", "SANICK", "NOOP", utils.SafeErrorParam(nickname), client.t("Client already had the desired nickname"))
74
+		}
51 75
 	} else if err != nil {
52
-		rb.Add(nil, server.name, ERR_UNKNOWNERROR, currentNick, "NICK", fmt.Sprintf(client.t("Could not set or change nickname: %s"), err.Error()))
76
+		client.server.logger.Error("internal", "couldn't change nick", nickname, err.Error())
77
+		if !isSanick {
78
+			rb.Add(nil, server.name, ERR_UNKNOWNERROR, details.nick, "NICK", client.t("Could not set or change nickname"))
79
+		} else {
80
+			rb.Add(nil, server.name, "FAIL", "SANICK", "UNKNOWN_ERROR", utils.SafeErrorParam(nickname), client.t("Could not set or change nickname"))
81
+		}
53 82
 	}
54 83
 	if err != nil {
55 84
 		return err

Loading…
Отказ
Запис