Skip to content

refactor(i18n): remove the unused i18n layer - #2465

Closed
Subramaniyajothi6 wants to merge 952 commits into
utksh1:mainfrom
Subramaniyajothi6:refactor/remove-dead-i18n-1864
Closed

refactor(i18n): remove the unused i18n layer#2465
Subramaniyajothi6 wants to merge 952 commits into
utksh1:mainfrom
Subramaniyajothi6:refactor/remove-dead-i18n-1864

Conversation

@Subramaniyajothi6

Copy link
Copy Markdown
Contributor

Closes #1864

What I found

The issue offers two directions — wire i18n in as a pilot, or remove the layer. Surveying it first:

  • The only reference anywhere in the frontend is App.tsx importing I18nProvider to wrap the tree.
  • useTranslation has zero call sites.
  • Every UI string is hardcoded English.
  • Only an en locale exists; translations carries just common and nav.
  • setLocale is exposed through context, but no UI can reach it — there is no locale switcher.

So this is scaffolding for a feature that was never built, not a partially-adopted one.

(Small correction to the issue text: the file is at frontend/src/components/I18nContext.tsx, not frontend/src/context/.)

Why removal rather than a pilot

Reintroducing i18n properly when localisation is actually planned is easier than maintaining a half-present abstraction in the meantime. The current state is worse than having nothing: a provider in the tree and a useTranslation export imply strings are already translatable, when adopting it would still mean migrating every page, adding the missing keys, and building the switcher.

That said, this is a product call as much as a code one. If localisation is on the roadmap and you would rather keep the scaffolding, say so and I will close this in favour of the pilot instead — the survey above is the same either way.

Changes

  • Delete frontend/src/components/I18nContext.tsx
  • Delete frontend/testing/unit/components/I18nContext.test.tsx (tests for the deleted module)
  • Unwrap I18nProvider from App.tsx

Nothing else referenced it, so nothing else changes.

Verification

  • Swept the whole repo — i18n, useTranslation, setLocale, I18nProvider — across src, testing, docs, and configs including quality-gate.cjs. Zero references remain.
  • tsc --noEmit — clean
  • quality-gate.cjs — 13 passed, 0 failed (its 1 warning is a pre-existing 2000ms animation)
  • Full vitest run64 files, 566 tests passed

That last number is worth stating precisely: main runs 65 files / 575 tests. The difference is exactly the one deleted test file and its 9 tests, which is what confirms nothing else depended on the layer.

Shikhar-404exe and others added 30 commits June 30, 2026 23:14
- New reportTemplates.ts service with ReportTemplate type, three built-in
  templates (executive, technical, compliance), and render/preview/export.
- ReportTemplatePicker.tsx slide-over component with type filtering, inline
  preview, and .md export.
- Integrate Templates button into Reports.tsx report cards.
- 21 unit tests covering template lifecycle, edge cases, and output.
…odule (utksh1#1524)

The extract_target helper in executor.py is a pure function but lives in
a heavy import chain (FastAPI, cache, config). Per the maintainer's
approved extraction pattern (used for routes_json_helpers), this extracts
extract_target into a small import-safe executor_target_helpers module
and re-exports it from executor.py so existing call sites keep working.

Closes utksh1#1389.

Co-authored-by: tmdeveloper007 <[email protected]>
utksh1 and others added 24 commits July 20, 2026 14:23
The debug default was changed from True to False in the security fix.
Update the test to match the new secure default.
The saved_views_router now has require_api_key dependency.
Override it in tests to bypass authentication for unit testing.
Add shared time_utils helpers and use timezone-aware UTC with an
explicit offset for generated_at and discovered_at across reports,
findings API responses, and report generation.

Closes utksh1#1882
Default to_utc_iso to timespec=auto so finding intelligence tests can
compare against datetime.now(UTC). Update TLS verification mocks for
crawler client.stream() and stub crawl_target in API scanner tests.
…idable

_init_default_policies() built the entire network denylist from the
single Pydantic field settings.network_denylist. Pydantic replaces
(rather than merges) a list field's default when SECUSCAN_NETWORK_DENYLIST
is set via env var, so any operator adding even one custom denylist
entry silently dropped the built-in protection for cloud metadata
(169.254.169.254), loopback, RFC1918/CGNAT ranges, and IPv6
link-local/ULA space -- reopening SSRF to the metadata endpoint despite
the code comment claiming the denylist was 'always enforced'.

Fix: move those ranges into a new MANDATORY_DENYLIST module constant
that is not read from settings and is applied unconditionally in
_init_default_policies before any operator-configured entries. The
operator-facing network_denylist setting is now purely additive.

Also updates the existing default-denylist test and adds a regression
test reproducing the exact scenario from utksh1#1748.
…ne-standardize-9bb6

fix(backend): standardize timezone handling to UTC ISO-8601
…t-metadata-ssrf

Fix utksh1#1748: make cloud-metadata/private-range denylist non-overridable
Fix: add auth and owner isolation to saved views API (closes utksh1#1743)
Cover the scapy_recon plugin parser.py with targeted behavioural tests:

- Metadata contract: file existence, valid JSON, required fields, engine
  binary, target/type field declarations
- ARP output: host count, IP+MAC extraction, finding keys, category,
  severity, description content, metadata consistency, remediation
- ICMP output: host count, IP extraction, Unknown-MAC default
- Single-host edge case: IP+MAC in result and description
- Malformed/empty input: empty string, whitespace-only, no UP: lines,
  mixed noise lines, malformed UP: lines, missing MAC separator

No changes to backend source; test file only.
* fix: stop dashboard polling after health failure and add manual retry

* fix: skip pre-existing upstream auth tests that cannot pass with mocked auth

* fix: update postcss to resolve GHSA-r28c-9q8g-f849 high severity vulnerability

* fix: document localhost-only Docker binding, add opt-in network override
* Fix risk scoring defaults

* Update risk scoring tests
…low runs (utksh1#2396)

POST /workflows/{id}/run and WorkflowScheduler._run_workflow now apply the
same exploit-validation gate as start_task: exploit-level plugins and
validation_mode=CONTROLLED_EXTRACT steps require a target policy with
allow_exploit_validation=True, otherwise the step is skipped with a warning.

Fixes utksh1#2395
…h1#2367)

Closes utksh1#1845

Escape was a no-op outside text fields. useShortcuts had:

    if (e.key === 'Escape') {
        // Could emit global event to close modals
        return
    }

so nothing was ever emitted and no popover had anything to listen for.

useShortcuts now broadcasts a CustomEvent, and useEscapeToClose is the
subscriber side. Keeping the single window-level keydown listener in
useShortcuts and fanning out via one event means the listener count does
not grow with the number of overlays on a page, and every overlay closes
the same way.

Wired into both affected surfaces. The Saved Views panel is the one named
in the issue; the bulk-export dropdown on the Findings page had the same
problem and is fixed with it.

useEscapeToClose only subscribes while its overlay is open, so a closed
popover neither reacts nor keeps a listener alive.

Escape while typing keeps its existing behaviour: useShortcuts blurs the
focused field and returns without broadcasting. A field inside a panel
therefore takes two presses — one to leave the field, one to close the
panel — so a stray Escape mid-typing cannot discard what was being
entered. That is pinned by a test rather than left implicit.

Verified by mutation: dropping the broadcast fails the useShortcuts test,
and dropping the subscriber fails the SavedViewsPanel test.
* Add retry support for notification delivery

* Remove trailing whitespace
* test: add unit tests for _validate_lengths field length guard

Covers valid/boundary/over-limit cases for name, description, and
notes fields, plus custom resource_type substitution and None
handling for optional fields. Closes utksh1#2307.

* fix: bump undici to patch high-severity vulnerability (GHSA-8xcm-r25x-g524 and related)
* fix(theme): persist dark mode in localStorage and sync html class

* fix(deps): override undici to resolve npm audit vulnerability

* fix(deps): bump undici override to ^8.10.0 to resolve high severity audit vulnerability

* fix(deps): update jsdom to v25 and override undici for CI compatibility

@utksh1 utksh1 left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Removes unused i18n layer. Clean refactor.

tmdeveloper007 and others added 2 commits August 6, 2026 14:17
…#2446) (utksh1#2451)

* test: add tests for rate_limiter.check_scan_rate_limit (closes utksh1#2446)

* test: fix sys.modules pollution in rate_limiter check_scan_rate_limit tests (closes utksh1#2446)

---------

Co-authored-by: Mavis Bot <[email protected]>
I18nContext exported useTranslation and t(), but nothing ever called them.
The only reference anywhere in the frontend was App.tsx importing
I18nProvider to wrap the tree. Every UI string is hardcoded English, only
an 'en' locale exists, translations carries just 'common' and 'nav', and
setLocale is exposed through context with no UI able to reach it.

So the layer is scaffolding for a feature that was never built. Removing it
rather than wiring it in: reintroducing i18n properly when localisation is
actually planned is easier than maintaining a half-present abstraction that
looks supported but is not, and whose presence implies strings are already
translatable when they are not.

Deletes the context and its test, and unwraps the provider from App.tsx.
No other module referenced it, so nothing else changes.

Verified: no i18n reference remains anywhere in src, tests, docs or configs;
tsc clean; quality gate 13 passed / 0 failed; full vitest 64 files / 566
tests pass -- 9 fewer than main's 575, which is exactly the deleted file.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[#88] No XSS found, but i18n layer is entirely dead code