This commit is contained in:
69
internal/judge/judge.go
Normal file
69
internal/judge/judge.go
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
package Judge
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/d3m0k1d/BanForge/internal/blocker"
|
||||||
|
"github.com/d3m0k1d/BanForge/internal/config"
|
||||||
|
"github.com/d3m0k1d/BanForge/internal/logger"
|
||||||
|
"github.com/d3m0k1d/BanForge/internal/storage"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Judge struct {
|
||||||
|
db *storage.DB
|
||||||
|
logger *logger.Logger
|
||||||
|
Blocker *blocker.BlockerEngine
|
||||||
|
rulesByService map[string][]config.Rule
|
||||||
|
}
|
||||||
|
|
||||||
|
func New(db *storage.DB) *Judge {
|
||||||
|
return &Judge{
|
||||||
|
db: db,
|
||||||
|
logger: logger.New(false),
|
||||||
|
rulesByService: make(map[string][]config.Rule),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (j *Judge) LoadRules(rules []config.Rule) {
|
||||||
|
j.rulesByService = make(map[string][]config.Rule)
|
||||||
|
for _, rule := range rules {
|
||||||
|
j.rulesByService[rule.ServiceName] = append(
|
||||||
|
j.rulesByService[rule.ServiceName],
|
||||||
|
rule,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
j.logger.Info("Rules loaded and indexed by service")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (j *Judge) ProcessUnviewed() ([]storage.LogEntry, error) {
|
||||||
|
rows, err := j.db.SearchUnViewed()
|
||||||
|
if err != nil {
|
||||||
|
j.logger.Error(fmt.Sprintf("Failed to query database: %v", err))
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer func() {
|
||||||
|
err = rows.Close()
|
||||||
|
if err != nil {
|
||||||
|
j.logger.Error(fmt.Sprintf("Failed to close database connection: %v", err))
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
var entries []storage.LogEntry
|
||||||
|
|
||||||
|
for rows.Next() {
|
||||||
|
var entry storage.LogEntry
|
||||||
|
err = rows.Scan(&entry.ID, &entry.Service, &entry.IP, &entry.Path, &entry.Status, &entry.Method, &entry.IsViewed, &entry.CreatedAt)
|
||||||
|
if err != nil {
|
||||||
|
j.logger.Error(fmt.Sprintf("Failed to scan database row: %v", err))
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
entries = append(entries, entry)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err = rows.Err(); err != nil {
|
||||||
|
j.logger.Error(fmt.Sprintf("Error iterating rows: %v", err))
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return entries, nil
|
||||||
|
}
|
||||||
@@ -40,3 +40,12 @@ func (d *DB) CreateTable() error {
|
|||||||
d.logger.Info("Created tables")
|
d.logger.Info("Created tables")
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (d *DB) SearchUnViewed() (*sql.Rows, error) {
|
||||||
|
rows, err := d.db.Query("SELECT id, service, ip, path, status, method, viewed, created_at FROM requests WHERE viewed = 0")
|
||||||
|
if err != nil {
|
||||||
|
d.logger.Error("Failed to query database")
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return rows, nil
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user