skillhub/web
dongmucat ace0cb2dd8 fix(auth): address CAS SSO review — XXE, AccessPolicy, timeouts, release wiring
Blockers:
- Harden XML parsing against XXE (disallow DOCTYPE, external entities/DTDs,
  enable FEATURE_SECURE_PROCESSING) and switch to UTF-8 byte decoding.
- Generalize AccessPolicy.evaluate from OAuthClaims to IdentityClaims; extract
  IdentityAuthenticator so OAuth and CAS share allow/deny/pending evaluation.
  CAS callback now goes through the policy instead of bypassing it with a
  direct bindOrCreate call.
- Configure JDK HttpClient with connect/read timeouts (5s/10s) and disable
  HTTP redirects to prevent ticket exfiltration via a malicious CAS server.

Major:
- Require HTTPS for skillhub.auth.cas.service-url in addition to server-url.
- Stop logging raw service tickets; log claims.subject() instead.
- Remove the dead authCasEnabled web flag — the backend AuthMethodCatalog is
  the single source of truth for CAS visibility, matching how OAuth works.
- Wire SKILLHUB_AUTH_CAS_* env vars into compose.release.yml and add a fully
  documented section in .env.release.example.

Minor:
- CasProtocolVersion enum replaces string comparisons in the validator.
- JSON multi-value array attributes are preserved as List<String> instead of
  silently dropping all but the first element.
- AuthMethod.methodType union adds 'CAS_REDIRECT'.
- application.yml notes that service-url must equal
  ${SKILLHUB_PUBLIC_BASE_URL}/api/v1/auth/cas/callback.

Tests:
- CasTicketValidatorTest tightens URL matching to assert ticket/service/format
  parameters and adds XXE + billion-laughs regression cases.
- IdentityAuthenticatorTest covers ALLOW / PENDING / DENY paths.
- AuthMethodCatalogTest exercises both cas.enabled=true and =false.
- isExternalRedirectMethod predicate extracted and unit-tested.
2026-05-27 15:19:11 +08:00
..
docker-entrypoint.d fix(auth): address CAS SSO review — XXE, AccessPolicy, timeouts, release wiring 2026-05-27 15:19:11 +08:00
e2e fix(admin): improve accessibility and E2E test precision 2026-05-18 17:25:21 +08:00
public feat(auth): support standard CAS 2.0/3.0 SSO protocol 2026-05-27 12:43:43 +08:00
src fix(auth): address CAS SSO review — XXE, AccessPolicy, timeouts, release wiring 2026-05-27 15:19:11 +08:00
.browserslistrc fix(web): restore compatibility with Chromium 83 (Debian 10) 2026-05-09 13:55:50 +08:00
.dockerignore feat(ops): improve Dockerfile caching, add dockerignore, docker profile, Makefile help 2026-03-12 17:50:34 +08:00
.eslintrc.cjs refactor: address code review findings from 2026-03-22 2026-03-23 13:48:23 +08:00
components.json feat(web): implement login page, dashboard, and API token management 2026-03-12 00:13:50 +08:00
Dockerfile refactor(ci): inline pnpm build-script approval into package.json 2026-05-09 11:10:53 +08:00
index.html feat: Implement initial web application structure, core pages, and UI components with i18n support. 2026-03-17 17:11:16 +08:00
LANDING_PAGE_REDESIGN.md feat(web): redesign homepage with modern landing page 2026-03-12 22:27:58 +08:00
nginx.conf.template fix: increase nginx upload limit and filter Chrome DevTools logs (#195) 2026-03-31 09:38:51 +08:00
package.json refactor(ci): inline pnpm build-script approval into package.json 2026-05-09 11:10:53 +08:00
playwright.config.ts test(e2e): run real-request playwright flows with one worker 2026-04-09 11:33:28 +05:30
playwright.smoke.config.ts test(e2e,ci): migrate web e2e to real API and add PR e2e workflow (#198) 2026-04-01 14:41:23 +08:00
pnpm-lock.yaml feat(skill): add version compare page with unified diff 2026-05-07 09:45:26 +08:00
postcss.config.js feat(web): implement login page, dashboard, and API token management 2026-03-12 00:13:50 +08:00
PREVIEW.md docs: add landing page preview guide 2026-03-12 22:28:31 +08:00
runtime-config.js.template fix(auth): address CAS SSO review — XXE, AccessPolicy, timeouts, release wiring 2026-05-27 15:19:11 +08:00
tailwind.config.ts feat: support Unicode characters in skill slugs (#196) 2026-03-31 10:17:34 +08:00
TODO.md fix(web): fix i18n language switching and add translations 2026-03-13 13:42:57 +08:00
tsconfig.json feat(web): refine app shell layout polish 2026-03-19 17:32:27 +08:00
vite.config.ts fix(web): scope legacy browser target to production build only 2026-05-09 13:55:57 +08:00