feat: first version for alpha test daemon on server
Some checks failed
CI.yml / build (push) Failing after 1m35s
Some checks failed
CI.yml / build (push) Failing after 1m35s
This commit is contained in:
@@ -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 {}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
package Judge
|
package judge
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|||||||
Reference in New Issue
Block a user