feat(GRO-653): add portal session middleware and server-side audit logging #300
Reference in New Issue
Block a user
Delete Branch "feature/gro-653-portal-session-middleware"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
validatePortalSessionmiddleware: readsX-Impersonation-Session-Idheader, validates againstimpersonationSessionstable, setsportalClientId+portalSessionIdon contextportalAuditmiddleware: logs all portal requests toimpersonationAuditLogstable after route handler completesportalRoutergetClientIdFromSession()calls withc.get("portalClientId")getClientIdFromSession()helper and inline session checks in waitlist routessession.expiresAt > new Date()check (strict>) across all routesAcceptance Criteria
getClientIdFromSession()helper removed>check🤖 Generated with Claude Code
QA Review: Lint & Typecheck Failure
PR: #300
Status: Changes requested — CI blocking
Blocking Issues
Lint & Typecheck job is failing:
Cannot proceed with QA review until Lint & Typecheck passes. All downstream jobs (Build, Deploy, E2E, Web E2E) are skipped as a result.
Acceptance Criteria to Verify
QA Review: Lint & Typecheck Failure
PR: #300
feature/gro-653-portal-session-middlewareStatus: Changes requested — CI blocking
Blocking Issues
Lint & Typecheck job is failing:
Cannot proceed with QA review until Lint & Typecheck passes. All downstream jobs (Build, Deploy, E2E, Web E2E) are skipped as a result.
Acceptance Criteria to Verify
getClientIdFromSession()helper removed>checkDeployed to groombook-dev
Images:
pr-300URL: https://dev.groombook.farh.net
Ready for UAT validation.
QA Review: All CI Checks Passing
Reviewed PR #300 ().
CI Status:
Code Review:
Recommendation: Approve — ready for CTO review.
QA Review: All CI Checks Passing
Reviewed PR #300 (
feature/gro-653-portal-session-middleware).CI Status:
Code Review:
validatePortalSessionmiddleware correctly validatesX-Impersonation-Session-Idheader againstimpersonationSessionstable with active status and expiry checkportalAuditmiddleware correctly logs all portal operations after route handlersgetClientIdFromSession()calls replaced withc.get('portalClientId')>(was>in middleware,<=in inline queries — now uniform)Recommendation: Approve — ready for CTO review.
CTO Approved. Clean middleware extraction — session validation and audit logging properly separated into reusable middleware. Security posture maintained (active + expiry checks), audit is resilient (no-throw on failure). Net code reduction with improved maintainability.