Browse Source

Call ApplyUserModeChanges for default user modes.

This ensures that counts like the number of invisible users are updated
correctly.
tags/v2.1.0-rc1
Alex Jaspersen 4 years ago
parent
commit
d5cec62df3
4 changed files with 24 additions and 31 deletions
  1. 2
    6
      irc/client.go
  2. 1
    1
      irc/config.go
  3. 14
    17
      irc/modes.go
  4. 7
    7
      irc/modes_test.go

+ 2
- 6
irc/client.go View File

@@ -326,9 +326,7 @@ func (server *Server) RunClient(conn IRCConn) {
326 326
 	session.idletimer.Initialize(session)
327 327
 	session.resetFakelag()
328 328
 
329
-	for _, defaultMode := range config.Accounts.defaultUserModes {
330
-		client.SetMode(defaultMode, true)
331
-	}
329
+	ApplyUserModeChanges(client, config.Accounts.defaultUserModes, false, nil)
332 330
 
333 331
 	if proxiedConn.Config.TLSConfig != nil {
334 332
 		client.SetMode(modes.TLS, true)
@@ -377,9 +375,7 @@ func (server *Server) AddAlwaysOnClient(account ClientAccount, chnames []string,
377 375
 		alwaysOn: true,
378 376
 	}
379 377
 
380
-	for _, defaultMode := range config.Accounts.defaultUserModes {
381
-		client.SetMode(defaultMode, true)
382
-	}
378
+	ApplyUserModeChanges(client, config.Accounts.defaultUserModes, false, nil)
383 379
 
384 380
 	client.SetMode(modes.TLS, true)
385 381
 	client.writerSemaphore.Initialize(1)

+ 1
- 1
irc/config.go View File

@@ -254,7 +254,7 @@ type AccountConfig struct {
254 254
 		exemptedNets []net.IPNet
255 255
 	} `yaml:"require-sasl"`
256 256
 	DefaultUserModes   *string `yaml:"default-user-modes"`
257
-	defaultUserModes   modes.Modes
257
+	defaultUserModes   modes.ModeChanges
258 258
 	LDAP               ldap.ServerConfig
259 259
 	LoginThrottling    ThrottleConfig `yaml:"login-throttling"`
260 260
 	SkipServerPassword bool           `yaml:"skip-server-password"`

+ 14
- 17
irc/modes.go View File

@@ -23,7 +23,7 @@ var (
23 23
 
24 24
 	// DefaultUserModes are set on all users when they login.
25 25
 	// this can be overridden in the `accounts` config, with the `default-user-modes` key
26
-	DefaultUserModes = modes.Modes{}
26
+	DefaultUserModes = modes.ModeChanges{}
27 27
 )
28 28
 
29 29
 // ApplyUserModeChanges applies the given changes, and returns the applied changes.
@@ -106,35 +106,32 @@ func ApplyUserModeChanges(client *Client, changes modes.ModeChanges, force bool,
106 106
 	return applied
107 107
 }
108 108
 
109
-// parseDefaultModes uses the provided mode change parser to parse the rawModes.
110
-func parseDefaultModes(rawModes string, parser func(params ...string) (modes.ModeChanges, map[rune]bool)) modes.Modes {
111
-	modeChangeStrings := strings.Fields(rawModes)
112
-	modeChanges, _ := parser(modeChangeStrings...)
113
-	defaultModes := make(modes.Modes, 0)
114
-	for _, modeChange := range modeChanges {
115
-		if modeChange.Op == modes.Add {
116
-			defaultModes = append(defaultModes, modeChange.Mode)
117
-		}
118
-	}
119
-	return defaultModes
120
-}
121
-
122 109
 // ParseDefaultChannelModes parses the `default-modes` line of the config
123 110
 func ParseDefaultChannelModes(rawModes *string) modes.Modes {
124 111
 	if rawModes == nil {
125 112
 		// not present in config, fall back to compile-time default
126 113
 		return DefaultChannelModes
127 114
 	}
128
-	return parseDefaultModes(*rawModes, modes.ParseChannelModeChanges)
115
+	modeChangeStrings := strings.Fields(*rawModes)
116
+	modeChanges, _ := modes.ParseChannelModeChanges(modeChangeStrings...)
117
+	defaultChannelModes := make(modes.Modes, 0)
118
+	for _, modeChange := range modeChanges {
119
+		if modeChange.Op == modes.Add {
120
+			defaultChannelModes = append(defaultChannelModes, modeChange.Mode)
121
+		}
122
+	}
123
+	return defaultChannelModes
129 124
 }
130 125
 
131 126
 // ParseDefaultUserModes parses the `default-user-modes` line of the config
132
-func ParseDefaultUserModes(rawModes *string) modes.Modes {
127
+func ParseDefaultUserModes(rawModes *string) modes.ModeChanges {
133 128
 	if rawModes == nil {
134 129
 		// not present in config, fall back to compile-time default
135 130
 		return DefaultUserModes
136 131
 	}
137
-	return parseDefaultModes(*rawModes, modes.ParseUserModeChanges)
132
+	modeChangeStrings := strings.Fields(*rawModes)
133
+	modeChanges, _ := modes.ParseUserModeChanges(modeChangeStrings...)
134
+	return modeChanges
138 135
 }
139 136
 
140 137
 // ApplyChannelModeChanges applies a given set of mode changes.

+ 7
- 7
irc/modes_test.go View File

@@ -43,19 +43,19 @@ func TestParseDefaultUserModes(t *testing.T) {
43 43
 
44 44
 	var parseTests = []struct {
45 45
 		raw      *string
46
-		expected modes.Modes
46
+		expected modes.ModeChanges
47 47
 	}{
48
-		{&iR, modes.Modes{modes.Invisible, modes.RegisteredOnly}},
49
-		{&i, modes.Modes{modes.Invisible}},
50
-		{&empty, modes.Modes{}},
51
-		{&rminusi, modes.Modes{modes.RegisteredOnly}},
52
-		{nil, modes.Modes{}},
48
+		{&iR, modes.ModeChanges{{Mode: modes.Invisible, Op: modes.Add}, {Mode: modes.RegisteredOnly, Op: modes.Add}}},
49
+		{&i, modes.ModeChanges{{Mode: modes.Invisible, Op: modes.Add}}},
50
+		{&empty, modes.ModeChanges{}},
51
+		{&rminusi, modes.ModeChanges{{Mode: modes.RegisteredOnly, Op: modes.Add}}},
52
+		{nil, modes.ModeChanges{}},
53 53
 	}
54 54
 
55 55
 	for _, testcase := range parseTests {
56 56
 		result := ParseDefaultUserModes(testcase.raw)
57 57
 		if !reflect.DeepEqual(result, testcase.expected) {
58
-			t.Errorf("expected modes %s, got %s", testcase.expected, result)
58
+			t.Errorf("expected modes %v, got %v", testcase.expected, result)
59 59
 		}
60 60
 	}
61 61
 }

Loading…
Cancel
Save