Replaces URL-embedded JWT tokens with a single-use, 60-second handoff code that the SPA exchanges via server-to-server POST. The URL now contains only `?handoff=<code>` — no tokens are placed in the browser history, proxy access logs, or Referer header. Backend: new SsoHandoff store (DashMap, 60s TTL, atomic DashMap::remove for single-use), POST /api/v1/auth/sso/handoff endpoint, 7 new tests. Frontend: SsoCallbackPage rewritten to use useSearchParams + POST exchange, with history.replaceState to clear the handoff code from the address bar. Switched from window.location.search to useSearchParams() for test compatibility. New Vitest infrastructure (vitest, @testing-library/react, jsdom) and 6 new tests. CI fix in ccba9e3: cargo fmt --all and added searchParams to useEffect dep array to satisfy CI's Rust Format and Frontend Lint checks. Refs: closes #4
46 lines
1.2 KiB
JSON
46 lines
1.2 KiB
JSON
{
|
|
"name": "patch-manager-ui",
|
|
"private": true,
|
|
"version": "0.1.7",
|
|
"type": "module",
|
|
"scripts": {
|
|
"dev": "vite",
|
|
"build": "tsc && vite build",
|
|
"preview": "vite preview",
|
|
"lint": "eslint src/ --ext .ts,.tsx --max-warnings 0",
|
|
"type-check": "tsc --noEmit",
|
|
"test": "vitest run",
|
|
"test:watch": "vitest"
|
|
},
|
|
"dependencies": {
|
|
"@emotion/react": "^11.14.0",
|
|
"@emotion/styled": "^11.14.0",
|
|
"@mui/icons-material": "^7.0.0",
|
|
"@mui/material": "^7.0.0",
|
|
"@types/qrcode": "^1.5.6",
|
|
"axios": "^1.9.0",
|
|
"jszip": "^3.10.1",
|
|
"qrcode": "^1.5.4",
|
|
"react": "^19.0.0",
|
|
"react-dom": "^19.0.0",
|
|
"react-router-dom": "^7.5.3",
|
|
"zustand": "^5.0.3"
|
|
},
|
|
"devDependencies": {
|
|
"@testing-library/jest-dom": "^6.9.1",
|
|
"@testing-library/react": "^16.3.2",
|
|
"@testing-library/user-event": "^14.6.1",
|
|
"@types/react": "^19.0.0",
|
|
"@types/react-dom": "^19.0.0",
|
|
"@typescript-eslint/eslint-plugin": "^8.30.0",
|
|
"@typescript-eslint/parser": "^8.30.0",
|
|
"@vitejs/plugin-react": "^4.4.1",
|
|
"eslint": "^9.24.0",
|
|
"eslint-plugin-react-hooks": "^5.0.0",
|
|
"jsdom": "^25.0.1",
|
|
"typescript": "^5.8.3",
|
|
"vite": "^6.3.3",
|
|
"vitest": "^2.1.9"
|
|
}
|
|
}
|