- Implemented TopAttackingIPsChart component for visualizing top attacking IPs. - Created hooks for fetching CrowdSec dashboard data including summary, timeline, top IPs, scenarios, and alerts. - Added tests for the new hooks to ensure data fetching works as expected. - Updated translation files for new dashboard terms in multiple languages. - Refactored CrowdSecConfig page to include a tabbed interface for configuration and dashboard views. - Added end-to-end tests for CrowdSec dashboard functionality including tab navigation, data display, and interaction with time range and refresh features.
25 lines
1.4 KiB
Go
25 lines
1.4 KiB
Go
package models
|
|
|
|
import (
|
|
"time"
|
|
)
|
|
|
|
// SecurityDecision stores a decision/action taken by CrowdSec/WAF/RateLimit or manual
|
|
// override so it can be audited and surfaced in the UI.
|
|
type SecurityDecision struct {
|
|
ID uint `json:"-" gorm:"primaryKey"`
|
|
UUID string `json:"uuid" gorm:"uniqueIndex"`
|
|
Source string `json:"source" gorm:"index;compositeIndex:idx_sd_source_created;compositeIndex:idx_sd_source_scenario_created;compositeIndex:idx_sd_source_ip_created"` // e.g., crowdsec, waf, ratelimit, manual
|
|
Action string `json:"action" gorm:"index"` // allow, block, challenge
|
|
IP string `json:"ip" gorm:"index;compositeIndex:idx_sd_source_ip_created"`
|
|
Host string `json:"host" gorm:"index"` // optional
|
|
RuleID string `json:"rule_id" gorm:"index"`
|
|
Details string `json:"details" gorm:"type:text"`
|
|
CreatedAt time.Time `json:"created_at" gorm:"index;compositeIndex:idx_sd_source_created,sort:desc;compositeIndex:idx_sd_source_scenario_created,sort:desc;compositeIndex:idx_sd_source_ip_created,sort:desc"`
|
|
|
|
// Dashboard enrichment fields (Issue #26, PR-1)
|
|
Scenario string `json:"scenario" gorm:"index;compositeIndex:idx_sd_source_scenario_created"`
|
|
Country string `json:"country" gorm:"index;size:2"`
|
|
ExpiresAt time.Time `json:"expires_at" gorm:"index"`
|
|
}
|