Add origin field and filter for ban sources (Tasks 1 & 2)
- Task 1: Mark imported blocklist IP addresses
- Add BanOrigin type and _derive_origin() to ban.py model
- Populate origin field in ban_service list_bans() and bans_by_country()
- BanTable and MapPage companion table show origin badge column
- Tests: origin derivation in test_ban_service.py and test_dashboard.py
- Task 2: Add origin filter to dashboard and world map
- ban_service: _origin_sql_filter() helper; origin param on list_bans()
and bans_by_country()
- dashboard router: optional origin query param forwarded to service
- Frontend: BanOriginFilter type + BAN_ORIGIN_FILTER_LABELS in ban.ts
- fetchBans / fetchBansByCountry forward origin to API
- useBans / useMapData accept and pass origin; page resets on change
- BanTable accepts origin prop; DashboardPage adds segmented filter
- MapPage adds origin Select next to time-range picker
- Tests: origin filter assertions in test_ban_service and test_dashboard
This commit is contained in:
@@ -61,9 +61,18 @@ A geographical overview of ban activity.
|
||||
|
||||
### Map
|
||||
|
||||
- A full world map rendered with country outlines only (no fill colours, no satellite imagery).
|
||||
- For every country that has at least one banned IP in the selected time range, the total count is displayed centred inside that country's borders.
|
||||
- Countries with zero banned IPs show no number and no label — they remain blank.
|
||||
- A full world map rendered with country outlines, showing ban activity through color-coded fills (no satellite imagery).
|
||||
- **Color coding:** Countries are colored based on their ban count for the selected time range:
|
||||
- **Red:** High ban count (100+ bans by default)
|
||||
- **Yellow:** Medium ban count (50 bans by default)
|
||||
- **Green:** Low ban count (20 bans by default)
|
||||
- **Transparent (no fill):** Zero bans
|
||||
- Colors are smoothly interpolated between the thresholds (e.g., 35 bans shows a yellow-green blend)
|
||||
- The color threshold values are configurable through the application settings
|
||||
- **Interactive zoom and pan:** Users can zoom in/out using mouse wheel or touch gestures, and pan by clicking and dragging. This allows detailed inspection of densely-affected regions. Zoom controls (zoom in, zoom out, reset view) are provided as overlay buttons in the top-right corner.
|
||||
- For every country that has bans, the total count is displayed centred inside that country's borders in the selected time range.
|
||||
- Countries with zero banned IPs show no number and no label — they remain blank and transparent.
|
||||
- Clicking a country filters the companion table below to show only bans from that country.
|
||||
- Time-range selector with the same quick presets:
|
||||
- Last 24 hours
|
||||
- Last 7 days
|
||||
@@ -184,6 +193,16 @@ A page to inspect and modify the fail2ban configuration without leaving the web
|
||||
- Set the database purge age — how long historical ban records are kept before automatic cleanup.
|
||||
- Set the maximum number of log-line matches stored per ban record in the database.
|
||||
|
||||
### Map Settings
|
||||
|
||||
- Configure the three color thresholds that determine how countries are colored on the World Map view based on their ban count:
|
||||
- **Low Threshold (Green):** Ban count at which the color transitions from light green to full green (default: 20).
|
||||
- **Medium Threshold (Yellow):** Ban count at which the color transitions from green to yellow (default: 50).
|
||||
- **High Threshold (Red):** Ban count at which the color transitions from yellow to red (default: 100).
|
||||
- Countries with ban counts between thresholds display smoothly interpolated colors.
|
||||
- Countries with zero bans remain transparent (no fill).
|
||||
- Changes take effect immediately on the World Map view without requiring a page reload.
|
||||
|
||||
---
|
||||
|
||||
## 7. Ban History
|
||||
|
||||
Reference in New Issue
Block a user