mirror of
https://github.com/ivuorinen/f2b.git
synced 2026-03-07 11:58:04 +00:00
* fix: repair Renovate config and convert Makefile to go run (#117) - Remove non-existent `github>renovatebot/presets:golang` preset that broke Renovate PR creation - Replace deprecated `fileMatch` with `managerFilePatterns` in customManagers - Rewrite regex to match new Makefile pattern (renovate comment above version variable assignment) - Fix `matchFileNames` glob pattern (`*.mk` -> `**/*.mk`) - Convert all tool invocations from `go install` + global binary to `go run tool@version` for reproducible builds - Convert npm global tools to `npx --yes` invocations - Remove `dev-deps` and `check-deps` targets (tools auto-download) - Add mdformat pre-commit hook with GFM support and config - Add `fmt-md` Makefile target for manual markdown formatting - Update local golangci-lint pre-commit hook to use `go run` - Apply golangci-lint v2.10.1 auto-fixes (fmt.Fprintf optimization) - Add nolint:gosec annotations for legitimate exec.Command usage - Exclude .serena/ from mdformat and megalinter - Add markdown indent_size=unset in .editorconfig for CommonMark compat * chore(deps): update GitHub Actions to latest versions - anthropics/claude-code-action: v1.0.34 -> v1.0.64 - actions/setup-go: v6.2.0 -> v6.3.0 - actions/upload-artifact: v6.0.0 -> v7.0.0 - goreleaser/goreleaser-action: v6.4.0 -> v7.0.0 - docker/login-action: v3.6.0 -> v3.7.0 - ivuorinen/actions: v2026.01.21 -> v2026.02.24 * fix: address code review feedback - Fix issue template YAML frontmatter (replace underscore separators with proper --- delimiters); exclude templates from mdformat - Replace string(rune(n)) with strconv.Itoa(n) in test files to produce deterministic numeric directory names instead of Unicode characters - Remove stale `make dev-deps` reference in README, replace with `make dev-setup` - Extract ban/unban format strings into shared.MetricsFmtBanOperations and shared.MetricsFmtUnbanOperations constants - Replace hardcoded coverage percentages in README with evergreen phrasing * fix: address round 2 code review feedback for PR #120 - Fix corrupted path traversal example in docs/security.md - Fix Renovate .mk regex to match nested paths (.*\.mk$) - Update checkmake pre-commit hook to v0.3.2 to match Makefile - Add sync.WaitGroup to unsynchronized goroutines in security tests - Fix fmt-md target to use pre-commit run mdformat - Pin markdownlint-cli2 to v0.21.0 in lint-md target - Standardize //nolint:gosec to // #nosec annotations for gosec CLI * fix(ci): install PyYAML dependency for PR lint workflow The pr-lint workflow uses ivuorinen/actions/pr-lint which internally calls validate-inputs running a Python script that imports yaml. Python was set up but PyYAML was never installed, causing ModuleNotFoundError at runtime. * fix: address round 3 code review feedback for PR #120 - Wrap Windows-style path traversal example in backtick code span so backslashes render literally in docs/security.md - Add Renovate-managed MARKDOWNLINT_CLI2_VERSION variable in Makefile to match the pattern used by all other tool versions
55 lines
1.4 KiB
Go
55 lines
1.4 KiB
Go
// Package main provides the f2b command-line interface for managing Fail2Ban
|
|
// jails and bans with secure sudo handling, input validation, and comprehensive testing.
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"strings"
|
|
|
|
"github.com/ivuorinen/f2b/cmd"
|
|
"github.com/ivuorinen/f2b/fail2ban"
|
|
)
|
|
|
|
func main() {
|
|
args := os.Args
|
|
var client fail2ban.Client
|
|
var err error
|
|
|
|
// Set up centralized logging - fail2ban package will use cmd.Logger wrapped with adapter
|
|
fail2ban.SetLogger(fail2ban.NewLogrusAdapter(cmd.Logger))
|
|
|
|
// Build config from env/flags
|
|
config := cmd.NewConfigFromEnv()
|
|
|
|
skip := false
|
|
if len(args) > 1 {
|
|
skip = cmd.IsSkipCommand(args[1])
|
|
}
|
|
|
|
if !skip {
|
|
client, err = fail2ban.NewClient(config.LogDir, config.FilterDir)
|
|
if err != nil {
|
|
fmt.Fprintln(os.Stderr, "Error:", err)
|
|
// Check if this is a sudo privilege error
|
|
if strings.Contains(err.Error(), "fail2ban operations require sudo privileges") {
|
|
fmt.Fprintln(os.Stderr, "Hint: Try running with 'sudo' or ensure your user is in the sudo group")
|
|
// #nosec G705 -- stderr hint, not user-facing HTML
|
|
fmt.Fprintln(
|
|
os.Stderr,
|
|
"Example: sudo",
|
|
strings.Join(os.Args, " "),
|
|
)
|
|
}
|
|
os.Exit(1)
|
|
}
|
|
} else {
|
|
// Use a no-op client for skip-only commands to prevent nil-pointer dereferences
|
|
client = fail2ban.NewNoOpClient()
|
|
}
|
|
|
|
if err := cmd.Execute(client, config); err != nil {
|
|
os.Exit(1)
|
|
}
|
|
}
|