feat: first version for alpha test daemon on server
Some checks failed
CI.yml / build (push) Failing after 1m35s

This commit is contained in:
d3m0k1d
2026-01-13 22:33:49 +03:00
parent 761d6012a1
commit c2e9154c87
2 changed files with 51 additions and 10 deletions

View File

@@ -2,14 +2,15 @@ package main
import ( import (
"fmt" "fmt"
"os" "github.com/d3m0k1d/BanForge/internal/blocker"
"github.com/d3m0k1d/BanForge/internal/config" "github.com/d3m0k1d/BanForge/internal/config"
_ "github.com/d3m0k1d/BanForge/internal/judge" "github.com/d3m0k1d/BanForge/internal/judge"
"github.com/d3m0k1d/BanForge/internal/logger" "github.com/d3m0k1d/BanForge/internal/logger"
"github.com/d3m0k1d/BanForge/internal/parser" "github.com/d3m0k1d/BanForge/internal/parser"
"github.com/d3m0k1d/BanForge/internal/storage" "github.com/d3m0k1d/BanForge/internal/storage"
"github.com/spf13/cobra" "github.com/spf13/cobra"
"os"
"time"
) )
var rootCmd = &cobra.Command{ var rootCmd = &cobra.Command{
@@ -57,27 +58,67 @@ var daemonCmd = &cobra.Command{
db, err := storage.NewDB() db, err := storage.NewDB()
if err != nil { if err != nil {
log.Error("Failed to create database", "error", err) log.Error("Failed to create database", "error", err)
os.Exit(1)
} }
defer func() {
err = db.Close()
if err != nil {
log.Error("Failed to close database connection", "error", err)
}
}()
cfg, err := config.LoadConfig() cfg, err := config.LoadConfig()
if err != nil { if err != nil {
log.Error("Failed to load config", "error", err) log.Error("Failed to load config", "error", err)
os.Exit(1)
} }
var b blocker.BlockerEngine
fw := cfg.Firewall.Name
switch fw {
case "ufw":
b = blocker.NewUfw(log)
case "iptables":
b = blocker.NewIptables(log, cfg.Firewall.Config)
case "nftables":
b = blocker.NewNftables(log, cfg.Firewall.Config)
case "firewalld":
b = blocker.NewFirewalld(log)
default:
log.Error("Unknown firewall", "firewall", fw)
os.Exit(1)
}
r, err := config.LoadRuleConfig()
if err != nil {
log.Error("Failed to load rules", "error", err)
os.Exit(1)
}
j := judge.New(db, b)
j.LoadRules(r)
go func() {
ticker := time.NewTicker(5 * time.Second)
defer ticker.Stop()
for range ticker.C {
if err := j.ProcessUnviewed(); err != nil {
log.Error("Failed to process unviewed", "error", err)
}
}
}()
for service := range cfg.Service { for service := range cfg.Service {
if cfg.Service[service].Enabled && cfg.Service[service].Name != "nginx" { if cfg.Service[service].Enabled && cfg.Service[service].Name != "nginx" {
pars, err := parser.NewScanner(cfg.Service[service].LogPath) pars, err := parser.NewScanner(cfg.Service[service].LogPath)
if err != nil { if err != nil {
log.Error("Failed to create parser", "error", err) log.Error("Failed to create scanner", "error", err)
} }
go pars.Start() go pars.Start()
go func() { go func(p *parser.Scanner) {
ng := parser.NewNginxParser() ng := parser.NewNginxParser()
resultCh := make(chan *storage.LogEntry) resultCh := make(chan *storage.LogEntry, 100)
ng.Parse(pars.Events(), resultCh) ng.Parse(p.Events(), resultCh)
go storage.Write(db, resultCh) go storage.Write(db, resultCh)
}(pars)
}
}
}() select {}
}
}
}, },
} }

View File

@@ -1,4 +1,4 @@
package Judge package judge
import ( import (
"fmt" "fmt"