0f261e31c2
Fix infinite re-fetch loop in useJailConfigs
...
The hook was passing an inline onSuccess callback to useListData, which
included onSuccess in its internal refresh function's dependency array.
This caused refresh to be recreated on each render, which triggered the
useEffect, which fired the fetch, which completed and caused a re-render,
creating an infinite loop.
Wrap onSuccess in useCallback with empty dependencies so it maintains a
stable reference across renders. This allows refresh to be stable when
its dependencies don't change, breaking the cycle.
Add documentation to Refactoring.md explaining the onSuccess stability
requirement for useListData callers.
Also add tests for useJailConfigs to verify it doesn't trigger infinite
refetches with stable onSuccess callback.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-04-22 21:16:42 +02:00
0481810226
Fix open redirect vulnerability in LoginPage
...
Validate the ?next= query parameter to prevent open redirects to
external URLs. The parameter is validated to ensure it is a relative
path (starts with / but not //) before using it for navigation.
Invalid paths fall back to '/'.
This prevents attackers from crafting login links like /login?next=https://evil.com
that would transparently redirect authenticated users to malicious sites.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-04-22 21:04:17 +02:00
a286ede49c
Refactor frontend components and dependencies
...
- Update ESLint configuration for frontend
- Refactor dialog components (ActivateJail, CreateAction, CreateFilter, CreateJail)
- Update JailsTab and RegexTesterTab components
- Refactor TopCountriesPieChart component
- Update package.json dependencies
- Update documentation (Tasks.md)
- Refactor CodeList component for jail page
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-04-22 20:26:43 +02:00
1bf0645c04
Configure Vite dev proxy via VITE_BACKEND_URL
2026-04-22 20:21:20 +02:00
1d41822a36
Add SEO/security meta tags and favicon to frontend index.html
2026-04-22 20:06:49 +02:00
b7fbad0328
Add dashboard filter context to remove prop drilling
2026-04-21 20:08:54 +02:00
b6d9c649ca
Delete hook barrel files and switch to direct hook imports
2026-04-21 20:02:50 +02:00
1ba82d56e7
Refactor ServerTab and ConfFilesTab to use reducers
2026-04-21 19:52:05 +02:00
260ce7e875
Fix frontend config tests for strict type narrowing
2026-04-21 19:40:51 +02:00
4c313af1c5
Narrow jail config types with explicit union values
2026-04-21 19:39:36 +02:00
fef8f60ee2
Add dark mode support with persisted OS-aware theme selection
2026-04-21 19:30:29 +02:00
4f91e8fdd3
Persist sidebar collapsed preference to localStorage
2026-04-21 19:17:00 +02:00
b3eb5dc6ec
Standardise loading state naming across dashboard hooks
2026-04-21 19:12:43 +02:00
094fb4fece
Replace index keys with stable keys in editable list components
2026-04-21 19:04:18 +02:00
4da2703966
Move constant inline styles into makeStyles
2026-04-21 18:47:18 +02:00
86a7336ac0
Refactor shared data source selection for dashboard and map
2026-04-21 17:56:59 +02:00
e244a85291
Extract generic useListData hook for shared list fetching
2026-04-21 17:53:58 +02:00
e683108965
Standardise AbortController cancellation in setup and server health hooks
...
Add abortable API signals for setup status and server health/log fetches, document hook cancellation patterns, and cover stale refresh cancellation with tests.
2026-04-21 17:38:35 +02:00
cf5a000bf5
Add AbortSignal support to dashboard/blocklist APIs and hooks
2026-04-21 17:29:05 +02:00
51e340fa33
backup
2026-04-20 20:19:43 +02:00
69d5cffabd
Remove duplicate api/file_config.ts and consolidate raw file APIs into api/config.ts
2026-04-20 20:19:20 +02:00
8b4a2f0b71
Fix useMapData debounce loading state
2026-04-20 20:10:48 +02:00
1694ac17f8
Add React.memo to heavy dashboard components
2026-04-20 20:00:59 +02:00
1d6564aa32
Add route code splitting and Vite vendor chunk splitting
2026-04-20 19:53:56 +02:00
27369b43d6
Memoize Fluent chart token resolution
2026-04-20 19:47:10 +02:00
20412dd94b
Memoize dashboard and history table columns
2026-04-20 19:28:29 +02:00
e593498de5
Strengthen setup password validation
...
- Add backend Pydantic password complexity validation for setup
- Update frontend setup page with password rule feedback and strength indicator
- Add/adjust setup API tests for password validation
- Document setup password requirements
- Fix frontend test type annotation issue
2026-04-20 19:23:12 +02:00
cc8c71906f
Add auth expiry interceptor and session-expired redirect
2026-04-19 20:31:49 +02:00
d0991e0d40
Fix SetupGuard error handling and add retry UI
2026-04-19 20:20:31 +02:00
c58eb240b1
Fix KVEditor duplicate key rename validation
...
Prevent users from renaming a KVEditor entry to an existing key and show inline validation errors.
2026-04-19 19:59:13 +02:00
082dcc7ee1
Fix BanUnbanForm floating promises and add submit guards
2026-04-19 19:42:39 +02:00
76c9f388a8
Fix HistoryPage stale appliedQuery effect and add mount query regression test
2026-04-19 19:36:44 +02:00
5446f6c3e1
Fix jail banned IP loading race with AbortController
2026-04-19 19:31:03 +02:00
7fb0cc727f
Surface setup error state instead of console.warn in useSetup
2026-04-19 18:53:02 +02:00
b6303cff72
Remove production test scaffolding from useMapData and update MapPage tests
2026-04-19 18:47:29 +02:00
e7582c4bae
Relocate misplaced frontend files
2026-04-19 18:36:55 +02:00
d44a667592
Fix unsafe frontend casts and mark Task 18 done
2026-04-19 18:25:32 +02:00
e6ee525e0f
Deduplicate TimeRange type in frontend type definitions
2026-04-19 18:21:51 +02:00
09a1d3c7b7
Move frontend runtime constants out of types/ban.ts
2026-04-19 18:18:24 +02:00
d99d6bd119
Replace inline frontend styles with makeStyles and design tokens
2026-04-19 12:04:24 +02:00
91269448d0
Replace ErrorBoundary fallback with Fluent UI styles and dialog compliance
2026-04-19 09:44:14 +02:00
47f9c602d4
Finish Task 13: extract remaining page subcomponents and clean page files
2026-04-19 09:38:23 +02:00
38b9d35255
Refactor frontend pages and config components into single-component files for Task 13
2026-04-19 09:30:35 +02:00
6c053cdaee
Add AbortController cleanup to async frontend effects
2026-04-18 21:30:57 +02:00
2105f8b435
Task 11: Remove direct API calls from components
2026-04-18 21:20:45 +02:00
3f197b1ad7
Split multi-hook frontend modules into single-hook files
2026-04-18 20:47:44 +02:00
fba7675eb8
Move auth and timezone hooks into dedicated hook files
2026-04-18 20:35:28 +02:00
d9550ae4aa
Split frontend config API into file_config, server, and health modules
2026-04-18 20:32:38 +02:00
96f75db75f
chore: release v0.9.19
2026-04-05 22:47:42 +02:00
6e2abe9d97
Fix world map country selection handling and preserve map during re-fetch
2026-04-05 22:44:50 +02:00