From 3ef6d2698e541d193f9bd728a578e750b4997e21 Mon Sep 17 00:00:00 2001 From: Aine Date: Fri, 18 Nov 2022 09:22:18 +0200 Subject: [PATCH] optimize ban checks --- bot/access.go | 5 +---- bot/bot.go | 2 ++ bot/command_admin.go | 1 + bot/data.go | 11 +++++++++++ bot/settings_lists.go | 11 +++++++++-- 5 files changed, 24 insertions(+), 6 deletions(-) diff --git a/bot/access.go b/bot/access.go index f20f002..cbd011b 100644 --- a/bot/access.go +++ b/bot/access.go @@ -97,10 +97,7 @@ func (b *Bot) IsGreylisted(addr net.Addr) bool { // IsBanned checks if address is banned func (b *Bot) IsBanned(addr net.Addr) bool { - if !b.getBotSettings().BanlistEnabled() { - return false - } - return b.getBanlist().Has(addr) + return b.banlist.Has(addr) } // Ban an address diff --git a/bot/bot.go b/bot/bot.go index f465f0e..cfadf7f 100644 --- a/bot/bot.go +++ b/bot/bot.go @@ -21,6 +21,7 @@ type Bot struct { allowedUsers []*regexp.Regexp allowedAdmins []*regexp.Regexp commands commandList + banlist bglist rooms sync.Map sendmail func(string, string, string) error log *logger.Logger @@ -102,6 +103,7 @@ func (b *Bot) Start(statusMsg string) error { if err := b.syncRooms(); err != nil { return err } + b.syncBanlist() b.initSync() b.log.Info("Postmoogle has been started") diff --git a/bot/command_admin.go b/bot/command_admin.go index cb906fb..fd52c2f 100644 --- a/bot/command_admin.go +++ b/bot/command_admin.go @@ -290,6 +290,7 @@ func (b *Bot) runBanlist(ctx context.Context, commandSlice []string) { if err != nil { b.Error(ctx, evt.RoomID, "cannot set bot config: %v", err) } + b.syncBanlist() b.SendNotice(ctx, evt.RoomID, "banlist has been updated") } diff --git a/bot/data.go b/bot/data.go index f100ae8..c10eede 100644 --- a/bot/data.go +++ b/bot/data.go @@ -50,3 +50,14 @@ func (b *Bot) syncRooms() error { return nil } + +func (b *Bot) syncBanlist() { + b.lock("banlist") + defer b.unlock("banlist") + + if !b.getBotSettings().BanlistEnabled() { + b.banlist = make(bglist, 0) + return + } + b.banlist = b.getBanlist() +} diff --git a/bot/settings_lists.go b/bot/settings_lists.go index 2295fc4..b3a3443 100644 --- a/bot/settings_lists.go +++ b/bot/settings_lists.go @@ -82,13 +82,20 @@ func (b *Bot) getBanlist() bglist { b.log.Error("cannot get banlist: %v", utils.UnwrapError(err)) } if config == nil { - config = map[string]string{} + config = make(bglist, 0) } return config } func (b *Bot) setBanlist(cfg bglist) error { + b.lock("banlist") + if cfg == nil { + cfg = make(bglist, 0) + } + b.banlist = cfg + defer b.unlock("banlist") + return utils.UnwrapError(b.lp.SetAccountData(acBanlistKey, cfg)) } @@ -98,7 +105,7 @@ func (b *Bot) getGreylist() bglist { b.log.Error("cannot get banlist: %v", utils.UnwrapError(err)) } if config == nil { - config = map[string]string{} + config = make(bglist, 0) } return config