diff --git a/backend/go.mod b/backend/go.mod index 11b7374a..f6053112 100644 --- a/backend/go.mod +++ b/backend/go.mod @@ -10,6 +10,7 @@ require ( github.com/golang-jwt/jwt/v5 v5.3.0 github.com/google/uuid v1.6.0 github.com/gorilla/websocket v1.5.3 + github.com/oschwald/geoip2-golang v1.13.0 github.com/prometheus/client_golang v1.23.2 github.com/robfig/cron/v3 v3.0.1 github.com/sirupsen/logrus v1.9.3 @@ -64,6 +65,7 @@ require ( github.com/onsi/ginkgo/v2 v2.9.5 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect github.com/opencontainers/image-spec v1.1.1 // indirect + github.com/oschwald/maxminddb-golang v1.13.0 // indirect github.com/pelletier/go-toml/v2 v2.2.4 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect diff --git a/backend/go.sum b/backend/go.sum index 55b59bda..79d4ac5a 100644 --- a/backend/go.sum +++ b/backend/go.sum @@ -133,6 +133,10 @@ github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8 github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040= github.com/opencontainers/image-spec v1.1.1/go.mod h1:qpqAh3Dmcf36wStyyWU+kCeDgrGnAve2nCC8+7h8Q0M= +github.com/oschwald/geoip2-golang v1.13.0 h1:Q44/Ldc703pasJeP5V9+aFSZFmBN7DKHbNsSFzQATJI= +github.com/oschwald/geoip2-golang v1.13.0/go.mod h1:P9zG+54KPEFOliZ29i7SeYZ/GM6tfEL+rgSn03hYuUo= +github.com/oschwald/maxminddb-golang v1.13.0 h1:R8xBorY71s84yO06NgTmQvqvTvlS/bnYZrrWX1MElnU= +github.com/oschwald/maxminddb-golang v1.13.0/go.mod h1:BU0z8BfFVhi1LQaonTwwGQlsHUEu9pWNdMfmq4ztm0o= github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4= github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= diff --git a/docs/plans/current_spec.md b/docs/plans/current_spec.md index 5c3e00a5..ce21ef42 100644 --- a/docs/plans/current_spec.md +++ b/docs/plans/current_spec.md @@ -1,31 +1,1187 @@ -# Plan Complete: Rate Limiting Bug Fix +# Cerberus Security Module - Comprehensive Remediation Plan -**Status:** ✅ Completed -**Completed:** December 2024 - -## Summary - -This plan addressed two issues with the Rate Limiting feature: - -1. **Backend Bug Fixed:** The `Upsert()` function in `security_service.go` now properly - saves all rate limiting fields (requests/sec, burst, window). - -2. **UX Improvements Added:** - - Status badge on Rate Limiting card (Security dashboard) - - "Currently Active" summary card on Rate Limiting config page - -## Files Changed - -- `backend/internal/services/security_service.go` - Fixed field persistence -- `backend/internal/services/security_service_test.go` - Added test coverage -- `frontend/src/pages/Security.tsx` - Added status badge -- `frontend/src/pages/RateLimiting.tsx` - Added active config summary -- `frontend/src/pages/__tests__/RateLimiting.spec.tsx` - Added tests - -## Documentation - -See [features.md](../features.md#rate-limiting) for user-facing documentation. +**Version:** 2.0 +**Date:** 2025-12-12 +**Status:** 🔴 PENDING - Issues #16, #17, #18, #19 incomplete --- -*This plan file can be archived or deleted.* +## Executive Summary + +This document provides a **comprehensive, actionable remediation plan** to complete the Cerberus security module. Four GitHub issues remain partially implemented: + +| Issue | Feature | Current State | Priority | +|-------|---------|---------------|----------| +| #16 | GeoIP Integration | Database downloaded, no Go code reads it | HIGH | +| #17 | CrowdSec Bouncer | Placeholder comment in code | HIGH | +| #18 | WAF (Coraza) Integration | Only checks `