From 1603fbee35912f6061d3552b9c3ea2be3ce112c5 Mon Sep 17 00:00:00 2001 From: d3m0k1d Date: Thu, 15 Jan 2026 19:14:44 +0300 Subject: [PATCH] feat: add simple setup func to blockerengine, fix init and db, version for realease v0.2.0 --- cmd/banforge/command/init.go | 14 ++++++++++++++ internal/blocker/firewalld.go | 4 ++++ internal/blocker/interface.go | 1 + internal/blocker/iptables.go | 4 ++++ internal/blocker/ufw.go | 25 +++++++++++++++++++++++++ internal/storage/db.go | 6 +++++- 6 files changed, 53 insertions(+), 1 deletion(-) diff --git a/cmd/banforge/command/init.go b/cmd/banforge/command/init.go index c697180..c37e6a5 100644 --- a/cmd/banforge/command/init.go +++ b/cmd/banforge/command/init.go @@ -4,6 +4,7 @@ import ( "fmt" "os" + "github.com/d3m0k1d/BanForge/internal/blocker" "github.com/d3m0k1d/BanForge/internal/config" "github.com/d3m0k1d/BanForge/internal/storage" "github.com/spf13/cobra" @@ -68,6 +69,19 @@ var InitCmd = &cobra.Command{ fmt.Println(err) os.Exit(1) } + cfg, err := config.LoadConfig() + if err != nil { + fmt.Println(err) + os.Exit(1) + } + b := blocker.GetBlocker(cfg.Firewall.Name, cfg.Firewall.Config) + err = b.Setup(cfg.Firewall.Config) + if err != nil { + fmt.Println(err) + os.Exit(1) + } + fmt.Println("Firewall configured") + db, err := storage.NewDB() if err != nil { fmt.Println(err) diff --git a/internal/blocker/firewalld.go b/internal/blocker/firewalld.go index 094079c..de7acb5 100644 --- a/internal/blocker/firewalld.go +++ b/internal/blocker/firewalld.go @@ -57,3 +57,7 @@ func (f *Firewalld) Unban(ip string) error { f.logger.Info("Reload " + string(output)) return nil } + +func (f *Firewalld) Setup(config string) error { + return nil +} diff --git a/internal/blocker/interface.go b/internal/blocker/interface.go index 37df415..96c819b 100644 --- a/internal/blocker/interface.go +++ b/internal/blocker/interface.go @@ -9,6 +9,7 @@ import ( type BlockerEngine interface { Ban(ip string) error Unban(ip string) error + Setup(config string) error } func GetBlocker(fw string, config string) BlockerEngine { diff --git a/internal/blocker/iptables.go b/internal/blocker/iptables.go index b6847dd..4b46cdc 100644 --- a/internal/blocker/iptables.go +++ b/internal/blocker/iptables.go @@ -101,3 +101,7 @@ func (f *Iptables) Unban(ip string) error { "output", string(output)) return nil } + +func (f *Iptables) Setup(config string) error { + return nil +} diff --git a/internal/blocker/ufw.go b/internal/blocker/ufw.go index fd8fc92..3a0ac44 100644 --- a/internal/blocker/ufw.go +++ b/internal/blocker/ufw.go @@ -55,3 +55,28 @@ func (u *Ufw) Unban(ip string) error { u.logger.Info("IP unbanned", "ip", ip, "output", string(output)) return nil } + +func (u *Ufw) Setup(config string) error { + if config != "" { + fmt.Printf("Ufw dont support config file\n") + cmd := exec.Command("sudo", "ufw", "enable") + output, err := cmd.CombinedOutput() + if err != nil { + u.logger.Error("failed to enable ufw", + "error", err.Error(), + "output", string(output)) + return fmt.Errorf("failed to enable ufw: %w", err) + } + } + if config == "" { + cmd := exec.Command("sudo", "ufw", "enable") + output, err := cmd.CombinedOutput() + if err != nil { + u.logger.Error("failed to enable ufw", + "error", err.Error(), + "output", string(output)) + return fmt.Errorf("failed to enable ufw: %w", err) + } + } + return nil +} diff --git a/internal/storage/db.go b/internal/storage/db.go index aeafee8..1023c2d 100644 --- a/internal/storage/db.go +++ b/internal/storage/db.go @@ -13,10 +13,14 @@ type DB struct { } func NewDB() (*DB, error) { - db, err := sql.Open("sqlite3", "/var/lib/banforge/storage.db") + db, err := sql.Open("sqlite3", "/var/lib/banforge/storage.db?mode=rwc&_journal_mode=WAL&_busy_timeout=10000&cache=shared") if err != nil { return nil, err } + + if err := db.Ping(); err != nil { + return nil, err + } return &DB{ logger: logger.New(false), db: db,