3
0
mirror of https://github.com/ergochat/ergo.git synced 2024-12-22 18:52:41 +01:00

make rehash-enable logic a little more uniform

This commit is contained in:
Shivaram Lingamneni 2019-12-22 08:17:56 -05:00
parent bd6c2117e8
commit 76a8768d05
2 changed files with 48 additions and 66 deletions

View File

@ -30,12 +30,14 @@ func (cm *ChannelManager) Initialize(server *Server) {
cm.chans = make(map[string]*channelManagerEntry) cm.chans = make(map[string]*channelManagerEntry)
cm.server = server cm.server = server
if server.Config().Channels.Registration.Enabled { cm.loadRegisteredChannels(server.Config())
cm.loadRegisteredChannels()
}
} }
func (cm *ChannelManager) loadRegisteredChannels() { func (cm *ChannelManager) loadRegisteredChannels(config *Config) {
if !config.Channels.Registration.Enabled {
return
}
registeredChannels := cm.server.channelRegistry.AllChannels() registeredChannels := cm.server.channelRegistry.AllChannels()
cm.Lock() cm.Lock()
defer cm.Unlock() defer cm.Unlock()

View File

@ -611,18 +611,10 @@ func (server *Server) applyConfig(config *Config, initial bool) (err error) {
} }
} }
// sanity checks complete, start modifying server state
server.logger.Info("server", "Using config file", server.configFilename) server.logger.Info("server", "Using config file", server.configFilename)
oldConfig := server.Config() oldConfig := server.Config()
// first, reload config sections for functionality implemented in subpackages: // first, reload config sections for functionality implemented in subpackages:
server.connectionLimiter.ApplyConfig(&config.Server.IPLimits)
tlConf := &config.Server.TorListeners
server.torLimiter.Configure(tlConf.MaxConnections, tlConf.ThrottleDuration, tlConf.MaxConnectionsPerDuration)
// reload logging config
wasLoggingRawIO := !initial && server.logger.IsLoggingRawIO() wasLoggingRawIO := !initial && server.logger.IsLoggingRawIO()
err = server.logger.ApplyConfig(config.Logging) err = server.logger.ApplyConfig(config.Logging)
if err != nil { if err != nil {
@ -632,6 +624,11 @@ func (server *Server) applyConfig(config *Config, initial bool) (err error) {
// notify existing clients if raw i/o logging was enabled by a rehash // notify existing clients if raw i/o logging was enabled by a rehash
sendRawOutputNotice := !wasLoggingRawIO && nowLoggingRawIO sendRawOutputNotice := !wasLoggingRawIO && nowLoggingRawIO
server.connectionLimiter.ApplyConfig(&config.Server.IPLimits)
tlConf := &config.Server.TorListeners
server.torLimiter.Configure(tlConf.MaxConnections, tlConf.ThrottleDuration, tlConf.MaxConnectionsPerDuration)
// setup new and removed caps // setup new and removed caps
addedCaps := caps.NewSet() addedCaps := caps.NewSet()
removedCaps := caps.NewSet() removedCaps := caps.NewSet()
@ -641,67 +638,50 @@ func (server *Server) applyConfig(config *Config, initial bool) (err error) {
server.logger.Debug("server", "Regenerating HELP indexes for new languages") server.logger.Debug("server", "Regenerating HELP indexes for new languages")
server.helpIndexManager.GenerateIndices(config.languageManager) server.helpIndexManager.GenerateIndices(config.languageManager)
if oldConfig != nil && config.Server.capValues[caps.Languages] != oldConfig.Server.capValues[caps.Languages] {
updatedCaps.Add(caps.Languages)
}
// SASL
authPreviouslyEnabled := oldConfig != nil && oldConfig.Accounts.AuthenticationEnabled
if config.Accounts.AuthenticationEnabled && (oldConfig == nil || !authPreviouslyEnabled) {
// enabling SASL
addedCaps.Add(caps.SASL)
} else if !config.Accounts.AuthenticationEnabled && (oldConfig == nil || authPreviouslyEnabled) {
// disabling SASL
removedCaps.Add(caps.SASL)
}
nickReservationPreviouslyDisabled := oldConfig != nil && !oldConfig.Accounts.NickReservation.Enabled
nickReservationNowEnabled := config.Accounts.NickReservation.Enabled
if nickReservationPreviouslyDisabled && nickReservationNowEnabled {
server.accounts.buildNickToAccountIndex(config)
}
hsPreviouslyDisabled := oldConfig != nil && !oldConfig.Accounts.VHosts.Enabled
hsNowEnabled := config.Accounts.VHosts.Enabled
if hsPreviouslyDisabled && hsNowEnabled {
server.accounts.initVHostRequestQueue(config)
}
chanRegPreviouslyDisabled := oldConfig != nil && !oldConfig.Channels.Registration.Enabled
chanRegNowEnabled := config.Channels.Registration.Enabled
if chanRegPreviouslyDisabled && chanRegNowEnabled {
server.channels.loadRegisteredChannels()
}
// STS
stsPreviouslyEnabled := oldConfig != nil && oldConfig.Server.STS.Enabled
stsValue := config.Server.capValues[caps.STS]
stsCurrentCapValue := ""
if oldConfig != nil { if oldConfig != nil {
stsCurrentCapValue = oldConfig.Server.capValues[caps.STS] // cap changes
} if oldConfig.Server.capValues[caps.Languages] != config.Server.capValues[caps.Languages] {
server.logger.Debug("server", "STS Vals", stsCurrentCapValue, stsValue, fmt.Sprintf("server[%v] config[%v]", stsPreviouslyEnabled, config.Server.STS.Enabled)) updatedCaps.Add(caps.Languages)
if (config.Server.STS.Enabled != stsPreviouslyEnabled) || (stsValue != stsCurrentCapValue) { }
// XXX: STS is always removed by CAP NEW sts=duration=0, not CAP DEL
// so the appropriate notify is always a CAP NEW; put it in addedCaps for any change
addedCaps.Add(caps.STS)
}
if oldConfig != nil && config.Accounts.Bouncer.Enabled != oldConfig.Accounts.Bouncer.Enabled { if !oldConfig.Accounts.AuthenticationEnabled && config.Accounts.AuthenticationEnabled {
if config.Accounts.Bouncer.Enabled { addedCaps.Add(caps.SASL)
} else if oldConfig.Accounts.AuthenticationEnabled && !config.Accounts.AuthenticationEnabled {
removedCaps.Add(caps.SASL)
}
if !oldConfig.Accounts.Bouncer.Enabled && config.Accounts.Bouncer.Enabled {
addedCaps.Add(caps.Bouncer) addedCaps.Add(caps.Bouncer)
} else { } else if oldConfig.Accounts.Bouncer.Enabled && !config.Accounts.Bouncer.Enabled {
removedCaps.Add(caps.Bouncer) removedCaps.Add(caps.Bouncer)
} }
}
// resize history buffers as needed if oldConfig.Server.STS.Enabled != config.Server.STS.Enabled || oldConfig.Server.capValues[caps.STS] != config.Server.capValues[caps.STS] {
if oldConfig != nil && oldConfig.History != config.History { // XXX: STS is always removed by CAP NEW sts=duration=0, not CAP DEL
for _, channel := range server.channels.Channels() { // so the appropriate notify is always a CAP NEW; put it in addedCaps for any change
channel.history.Resize(config.History.ChannelLength, config.History.AutoresizeWindow) addedCaps.Add(caps.STS)
} }
for _, client := range server.clients.AllClients() {
client.history.Resize(config.History.ClientLength, config.History.AutoresizeWindow) // if certain features were enabled by rehash, we need to load the corresponding data
// from the store
if !oldConfig.Accounts.NickReservation.Enabled {
server.accounts.buildNickToAccountIndex(config)
}
if !oldConfig.Accounts.VHosts.Enabled {
server.accounts.initVHostRequestQueue(config)
}
if !oldConfig.Channels.Registration.Enabled {
server.channels.loadRegisteredChannels(config)
}
// resize history buffers as needed
if oldConfig.History != config.History {
for _, channel := range server.channels.Channels() {
channel.history.Resize(config.History.ChannelLength, config.History.AutoresizeWindow)
}
for _, client := range server.clients.AllClients() {
client.history.Resize(config.History.ClientLength, config.History.AutoresizeWindow)
}
} }
} }