Преглед изворни кода

strings: Fix nick bugs, use UsernameCaseMapped

tags/v0.6.0
Daniel Oaks пре 7 година
родитељ
комит
2b240faa90
4 измењених фајлова са 13 додато и 10 уклоњено
  1. 1
    1
      irc/client.go
  2. 4
    5
      irc/client_lookup_set.go
  3. 1
    1
      irc/server.go
  4. 7
    3
      irc/strings.go

+ 1
- 1
irc/client.go Прегледај датотеку

@@ -397,11 +397,11 @@ func (client *Client) SetNickname(nickname string) error {
397 397
 // ChangeNickname changes the existing nickname of the client.
398 398
 func (client *Client) ChangeNickname(nickname string) error {
399 399
 	origNickMask := client.nickMaskString
400
-	client.updateNickMask()
401 400
 	err := client.server.clients.Replace(client.nick, nickname, client)
402 401
 	if err == nil {
403 402
 		client.server.whoWas.Append(client)
404 403
 		client.nick = nickname
404
+		client.updateNickMask()
405 405
 		for friend := range client.Friends() {
406 406
 			friend.Send(nil, origNickMask, "NICK", nickname)
407 407
 		}

+ 4
- 5
irc/client_lookup_set.go Прегледај датотеку

@@ -128,13 +128,12 @@ func (clients *ClientLookupSet) Replace(oldNick, newNick string, client *Client)
128 128
 	clients.ByNickMutex.Lock()
129 129
 	defer clients.ByNickMutex.Unlock()
130 130
 
131
-	oldClient := clients.getNoMutex(newNick)
132
-	if oldClient != nil {
131
+	oldClient := clients.ByNick[newNick]
132
+	if oldClient == nil || oldClient == client {
133
+		// whoo
134
+	} else {
133 135
 		return ErrNicknameInUse
134 136
 	}
135
-	if oldClient != client {
136
-		return ErrNicknameMismatch
137
-	}
138 137
 
139 138
 	if oldNick == newNick {
140 139
 		// if they're only changing case, don't need to remove+re-add them

+ 1
- 1
irc/server.go Прегледај датотеку

@@ -305,7 +305,7 @@ func (server *Server) setISupport() {
305 305
 	// add RPL_ISUPPORT tokens
306 306
 	server.isupport = NewISupportList()
307 307
 	server.isupport.Add("AWAYLEN", strconv.Itoa(server.limits.AwayLen))
308
-	server.isupport.Add("CASEMAPPING", "rfc7700")
308
+	server.isupport.Add("CASEMAPPING", casemappingName)
309 309
 	server.isupport.Add("CHANMODES", strings.Join([]string{ChannelModes{BanMask, ExceptMask, InviteMask}.String(), "", ChannelModes{UserLimit, Key}.String(), ChannelModes{InviteOnly, Moderated, NoOutside, OpOnlyTopic, ChanRoleplaying, Secret}.String()}, ","))
310 310
 	server.isupport.Add("CHANNELLEN", strconv.Itoa(server.limits.ChannelLen))
311 311
 	server.isupport.Add("CHANTYPES", "#")

+ 7
- 3
irc/strings.go Прегледај датотеку

@@ -12,18 +12,22 @@ import (
12 12
 	"golang.org/x/text/secure/precis"
13 13
 )
14 14
 
15
+const (
16
+	casemappingName = "rfc7613"
17
+)
18
+
15 19
 var (
16 20
 	errInvalidCharacter = errors.New("Invalid character")
17 21
 )
18 22
 
19 23
 // Casefold returns a casefolded string, without doing any name or channel character checks.
20 24
 func Casefold(str string) (string, error) {
21
-	return precis.Nickname.CompareKey(str)
25
+	return precis.UsernameCaseMapped.CompareKey(str)
22 26
 }
23 27
 
24 28
 // CasefoldChannel returns a casefolded version of a channel name.
25 29
 func CasefoldChannel(name string) (string, error) {
26
-	lowered, err := precis.Nickname.CompareKey(name)
30
+	lowered, err := Casefold(name)
27 31
 
28 32
 	if err != nil {
29 33
 		return "", err
@@ -47,7 +51,7 @@ func CasefoldChannel(name string) (string, error) {
47 51
 
48 52
 // CasefoldName returns a casefolded version of a nick/user name.
49 53
 func CasefoldName(name string) (string, error) {
50
-	lowered, err := precis.Nickname.CompareKey(name)
54
+	lowered, err := Casefold(name)
51 55
 
52 56
 	if err != nil {
53 57
 		return "", err

Loading…
Откажи
Сачувај