91e3181bbc
dialyzer: fix all unmatched_return warnings (154 → 0)
...
Prefix fire-and-forget calls (PubSub.broadcast, Oban enqueue, Logger,
update_*, etc.) with `_ =` so dialyzer knows the return value is
intentionally discarded. Wrap a few if/case expressions whose
branches produce mixed types the same way.
No behavior changes — only explicit acknowledgement of discarded
returns.
Warnings: 242 → 88.
2026-04-21 10:03:55 -05:00
4e3f732f21
ui: comprehensive button styling audit - convert all text-styled actions to proper buttons
...
Fixed 10 text-styled action buttons across 7 files:
Agent Management:
- Delete Agent buttons (2x) → danger variant
- View Setup links (already fixed) → secondary variant
Organization Settings:
- Remove Member button → danger variant
Admin Pages:
- Edit Overrides button → secondary variant
- Delete Organization button → danger variant
- Remove IP/CIDR button → danger variant
- Delete User button → danger variant
Device Management:
- Delete Backup button → danger variant
All action buttons now use proper .button component with appropriate
variants (danger for destructive actions, secondary for neutral actions).
This provides consistent visual hierarchy and makes destructive actions
more clearly identifiable.
2026-03-09 15:32:42 -05:00
8752dfec49
fix: netbox url field type, gaiia ipRange→block, remove unknown webhook log
2026-02-14 17:44:01 -06:00
243b773e39
i18n: wrap all user-facing strings in gettext()
2026-02-14 17:44:01 -06:00
f53332672b
add IP allowlist link to superadmin nav, rename whitelist/blacklist to allowlist/denylist
2026-02-11 11:40:44 -06:00
4d73e77f3a
Add 404-based brute force protection system
...
Implements automated detection and blocking of IPs exhibiting scanning behavior (5+ unique 404s within 1 minute).
Key features:
- Progressive ban escalation (5 min → 1 hour → permanent)
- CIDR range and exact IP whitelisting
- Redis-backed 404 path tracking with 60s TTL
- Cloudflare WAF integration for permanent bans
- Admin UI for whitelist and blocked IP management
- Oban cron jobs for cleanup (expired bans, stale violations)
- ETS caching for whitelist performance
Components:
- Plug: ToweropsWeb.Plugs.BruteForceProtection
- Context: Towerops.Security.BruteForce
- Schemas: IpBlock, IpWhitelist
- Workers: CloudflareBanWorker, ExpiredBanCleanupWorker, StaleViolationCleanupWorker
- Admin UI: /admin/security (superuser only)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 16:31:48 -06:00