2 Commits

Author SHA1 Message Date
d3m0k1d
577f7ef0b9 Add linter and fix more errs in proj
Some checks failed
CI.yml / build (push) Failing after 14s
2026-01-11 19:41:20 +03:00
d3m0k1d
95ce6441d1 Add 2026-01-11 19:41:04 +03:00
8 changed files with 60 additions and 19 deletions

View File

@@ -20,6 +20,8 @@ jobs:
cache: false
- name: Install deps
run: go mod tidy
- name: Run linter
run: golangci-lint run ./...
- name: Run tests
run: go test ./...
- name: Build

21
.golangci.yml Normal file
View File

@@ -0,0 +1,21 @@
version: "2"
run:
timeout: 5m
tests: false
build-tags:
- integration
linters:
enable:
- errcheck
- errname
- govet
- staticcheck
- gosec
formatters:
enable:
- gofmt
- goimports

View File

@@ -2,8 +2,9 @@ package main
import (
"fmt"
"github.com/spf13/cobra"
"os"
"github.com/spf13/cobra"
)
var rootCmd = &cobra.Command{
@@ -19,8 +20,16 @@ var initCmd = &cobra.Command{
Short: "Initialize BanForge",
Run: func(cmd *cobra.Command, args []string) {
fmt.Println("Initializing BanForge...")
os.Mkdir("/var/log/banforge", 0755)
os.Mkdir("/etc/banforge", 0755)
err := os.Mkdir("/var/log/banforge", 0750)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
err = os.Mkdir("/etc/banforge", 0750)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
},
}

View File

@@ -1,8 +1,9 @@
package blocker
import (
"github.com/d3m0k1d/BanForge/internal/logger"
"os/exec"
"github.com/d3m0k1d/BanForge/internal/logger"
)
type Ufw struct {
@@ -16,7 +17,10 @@ func NewUfw(logger *logger.Logger) *Ufw {
}
func (ufw *Ufw) Ban(ip string) error {
validateIP(ip)
err := validateIP(ip)
if err != nil {
return err
}
cmd := exec.Command("sudo", "ufw", "--force", "deny", "from", ip)
output, err := cmd.CombinedOutput()
if err != nil {
@@ -28,7 +32,10 @@ func (ufw *Ufw) Ban(ip string) error {
}
func (ufw *Ufw) Unban(ip string) error {
validateIP(ip)
err := validateIP(ip)
if err != nil {
return err
}
cmd := exec.Command("sudo", "ufw", "--force", "delete", "deny", "from", ip)
output, err := cmd.CombinedOutput()
if err != nil {

View File

@@ -19,10 +19,6 @@ func CreateConf() error {
return fmt.Errorf("you must be root to run this command, use sudo/doas")
}
if err := os.MkdirAll(ConfigDir, 0755); err != nil {
return fmt.Errorf("failed to create config directory: %w", err)
}
configPath := filepath.Join(ConfigDir, ConfigFile)
if _, err := os.Stat(configPath); err == nil {
@@ -30,13 +26,17 @@ func CreateConf() error {
return nil
}
file, err := os.Create(configPath)
file, err := os.Create("/etc/banforge/config.toml")
if err != nil {
return fmt.Errorf("failed to create config file: %w", err)
}
defer file.Close()
if err := os.Chmod(configPath, 0644); err != nil {
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)
}

View File

@@ -2,7 +2,7 @@ package config
type Firewall struct {
Name string `toml:"name"`
Ban_time int `toml:ban_time`
BanTime int `toml:"ban_time"`
}
type Service struct {

View File

@@ -24,4 +24,3 @@ func New(debug bool) *Logger {
Logger: slog.New(handler),
}
}

View File

@@ -22,7 +22,7 @@ type Scanner struct {
}
func NewScanner(path string) (*Scanner, error) {
file, err := os.Open(path)
file, err := os.Open(path) // #nosec G304 -- admin tool, runs as root, path controlled by operator
if err != nil {
return nil, err
}
@@ -67,7 +67,10 @@ func (s *Scanner) Start() {
func (s *Scanner) Stop() {
close(s.stopCh)
time.Sleep(150 * time.Millisecond)
s.file.Close()
err := s.file.Close()
if err != nil {
s.logger.Error("Failed to close file")
}
close(s.ch)
}