Browse Source

fix #537

tags/v1.1.0-rc1
Shivaram Lingamneni 5 years ago
parent
commit
3b71be3bf0
3 changed files with 28 additions and 12 deletions
  1. 22
    11
      irc/channelmanager.go
  2. 2
    1
      irc/config.go
  3. 4
    0
      oragono.yaml

+ 22
- 11
irc/channelmanager.go View File

@@ -65,19 +65,30 @@ func (cm *ChannelManager) Join(client *Client, name string, key string, isSajoin
65 65
 		return errNoSuchChannel
66 66
 	}
67 67
 
68
-	cm.Lock()
69
-	entry := cm.chans[casefoldedName]
70
-	if entry == nil {
71
-		registered := cm.registeredChannels[casefoldedName]
72
-		entry = &channelManagerEntry{
73
-			channel:      NewChannel(server, name, registered),
74
-			pendingJoins: 0,
68
+	channel := func() *Channel {
69
+		cm.Lock()
70
+		defer cm.Unlock()
71
+
72
+		entry := cm.chans[casefoldedName]
73
+		if entry == nil {
74
+			registered := cm.registeredChannels[casefoldedName]
75
+			// enforce OpOnlyCreation
76
+			if !registered && server.Config().Channels.OpOnlyCreation && !client.HasRoleCapabs("chanreg") {
77
+				return nil
78
+			}
79
+			entry = &channelManagerEntry{
80
+				channel:      NewChannel(server, name, registered),
81
+				pendingJoins: 0,
82
+			}
83
+			cm.chans[casefoldedName] = entry
75 84
 		}
76
-		cm.chans[casefoldedName] = entry
85
+		entry.pendingJoins += 1
86
+		return entry.channel
87
+	}()
88
+
89
+	if channel == nil {
90
+		return errNoSuchChannel
77 91
 	}
78
-	entry.pendingJoins += 1
79
-	channel := entry.channel
80
-	cm.Unlock()
81 92
 
82 93
 	channel.EnsureLoaded()
83 94
 	channel.Join(client, key, isSajoin, rb)

+ 2
- 1
irc/config.go View File

@@ -320,7 +320,8 @@ type Config struct {
320 320
 	Channels struct {
321 321
 		DefaultModes         *string `yaml:"default-modes"`
322 322
 		defaultModes         modes.Modes
323
-		MaxChannelsPerClient int `yaml:"max-channels-per-client"`
323
+		MaxChannelsPerClient int  `yaml:"max-channels-per-client"`
324
+		OpOnlyCreation       bool `yaml:"operator-only-creation"`
324 325
 		Registration         ChannelRegistrationConfig
325 326
 	}
326 327
 

+ 4
- 0
oragono.yaml View File

@@ -368,6 +368,10 @@ channels:
368 368
     # how many channels can a client be in at once?
369 369
     max-channels-per-client: 100
370 370
 
371
+    # if this is true, new channels can only be created by operators with the
372
+    # `chanreg` operator capability
373
+    operator-only-creation: false
374
+
371 375
     # channel registration - requires an account
372 376
     registration:
373 377
         # can users register new channels?

Loading…
Cancel
Save