From 5362761b826506bd6a95d189bf36cb264a7344c0 Mon Sep 17 00:00:00 2001 From: d3m0k1d Date: Tue, 13 Jan 2026 18:02:22 +0300 Subject: [PATCH] feat: add new logic for rule based bans --- internal/config/appconf.go | 22 ++++++++++++++++++++++ internal/config/sysconf.go | 14 ++++++++++++++ internal/config/types.go | 13 +++++++++++++ 3 files changed, 49 insertions(+) create mode 100644 internal/config/appconf.go diff --git a/internal/config/appconf.go b/internal/config/appconf.go new file mode 100644 index 0000000..c181121 --- /dev/null +++ b/internal/config/appconf.go @@ -0,0 +1,22 @@ +package config + +import ( + "fmt" + + "github.com/BurntSushi/toml" + "github.com/d3m0k1d/BanForge/internal/logger" +) + +func LoadRuleConfig() ([]Rule, error) { + log := logger.New(false) + var cfg Rules + + _, err := toml.DecodeFile("/etc/banforge/rules.toml", &cfg) + if err != nil { + log.Error(fmt.Sprintf("failed to decode config: %v", err)) + return nil, err + } + + log.Info(fmt.Sprintf("loaded %d rules", len(cfg.Rules))) + return cfg.Rules, nil +} diff --git a/internal/config/sysconf.go b/internal/config/sysconf.go index fcd75e6..9e21a29 100644 --- a/internal/config/sysconf.go +++ b/internal/config/sysconf.go @@ -46,6 +46,20 @@ func CreateConf() error { return fmt.Errorf("failed to write config file: %w", err) } fmt.Printf(" Config file created: %s\n", configPath) + file, err = os.Create("/etc/banforge/rules.toml") + if err != nil { + return fmt.Errorf("failed to create rules file: %w", err) + } + defer func() { + err = file.Close() + if err != nil { + fmt.Println(err) + } + }() + if err := os.Chmod(configPath, 0600); err != nil { + return fmt.Errorf("failed to set permissions: %w", err) + } + fmt.Printf(" Rules file created: %s\n", configPath) return nil } diff --git a/internal/config/types.go b/internal/config/types.go index df7f2fe..4fcdcbc 100644 --- a/internal/config/types.go +++ b/internal/config/types.go @@ -16,3 +16,16 @@ type Config struct { Firewall Firewall `toml:"firewall"` Service Service `toml:"service"` } + +// Rules +type Rules struct { + Rules []Rule `toml:"rule"` +} + +type Rule struct { + Name string `toml:"name"` + ServiceName string `toml:"service"` + Path string `toml:"path"` + Status string `toml:"status"` + Method string `toml:"method"` +}