af3c24275d
- Backend: NestJS 10 + TypeORM (better-sqlite3) feature-modular layout.
- Entities: user, setting, category, challenge, challenge_file, solve,
refresh_token, blog_post. Auto-run migrations + idempotent 6-system-
category seed on startup.
- Argon2id password hashing with policy check; JWT access + rotating
refresh tokens (HttpOnly cookie); CSRF middleware (SameSite + custom
X-CSRF-Token header); global JWT auth guard with @Public() opt-out;
per-IP login backoff + per-IP registration rate limit.
- Endpoints: auth (login/refresh/logout/csrf), users (first-admin
registration), system (bootstrap/event status/SSE), admin (guarded
user CRUD with last-admin invariant), frontend module (uploads +
SPA fallback).
- Security: helmet+CSP+HSTS-gated-by-TLS, CORS allowlist, structured
global exception filter, Zod request validation pipes, OpenAPI 3.1
served at /api/docs and /api/docs-json, 10 canonical themes under
backend/themes/.
- Frontend: Angular 17 standalone components, lazy-loaded feature routes,
signals, functional HttpInterceptorFn (csrf + auth), functional
CanActivateFn auth guard, HttpOnly-cookie-based auth service.
- Tests: Jest + supertest, 46 tests across 13 suites covering
migrations, env schema, theme loader, event status, login backoff,
registration rate limit, ApiError shape, bootstrap integration,
auth refresh rotation, admin guard, last-admin invariant, SSE flat
payloads. Single-command runner: `npm test`.
30 lines
906 B
JSON
30 lines
906 B
JSON
{
|
|
"name": "hipctf",
|
|
"version": "0.1.0",
|
|
"private": true,
|
|
"description": "HIPCTF platform monorepo (NestJS API + Angular SPA)",
|
|
"workspaces": [
|
|
"backend",
|
|
"frontend"
|
|
],
|
|
"scripts": {
|
|
"build": "npm --workspace frontend run build && npm --workspace backend run build",
|
|
"start": "node backend/dist/main.js",
|
|
"start:dev": "npm --workspace backend run start:dev",
|
|
"test": "jest --config tests/jest.config.js",
|
|
"test:backend": "jest --config tests/jest.config.js --selectProjects backend",
|
|
"test:frontend": "jest --config tests/jest.config.js --selectProjects frontend",
|
|
"setup": "bash setup.sh"
|
|
},
|
|
"devDependencies": {
|
|
"@types/jest": "^29.5.12",
|
|
"@types/jsdom": "^28.0.3",
|
|
"@types/node": "^20.11.0",
|
|
"jest": "^29.7.0",
|
|
"jest-environment-jsdom": "^29.7.0",
|
|
"jsdom": "^29.1.1",
|
|
"ts-jest": "^29.1.2",
|
|
"typescript": "^5.4.5"
|
|
}
|
|
}
|