Skip to content

Latest commit

 

History

History
285 lines (215 loc) · 10.2 KB

File metadata and controls

285 lines (215 loc) · 10.2 KB

Branch Summary: feature/security-and-features-overhaul

Created: July 29, 2026
Branch: feature/security-and-features-overhaul
Status: Ready for Implementation


Overview

This branch contains a comprehensive security hardening and feature enhancement initiative spanning 4 epics with ~50+ implementation tasks. All work is designed to be non-breaking, well-tested, and production-safe with phased rollout capabilities.


Four Core Epics

🔐 Epic 1: Admin MFA Enforcement & Step-Up Authentication

Risk: Compromised admin JWT = full access to escrow refunds, dispute resolution, user deletion without 2FA
Solution: Mandatory MFA for admins + fresh TOTP verification for sensitive operations

Key Files:

  • src/middleware/require-mfa.middleware.ts - Enforce MFA enabled for admins
  • src/middleware/step-up-auth.middleware.ts - Verify fresh TOTP for high-value ops
  • src/services/admin.service.ts - Gating for sensitive operations
  • src/routes/admin.routes.ts - Apply MFA middleware to admin endpoints
  • database/migrations/XXX_admin_mfa_enforcement.sql - Redis-backed lockout tracking

Acceptance Criteria:

  • ✅ Admin without MFA → HTTP 403 on all admin routes
  • ✅ Step-up without code → HTTP 428
  • ✅ Invalid code → HTTP 401
  • ✅ 5 failures in 5 min → 15-min lockout (HTTP 429)
  • ✅ Grace period: MFA verified < 5 min → skip step-up

Deliverables: 2 middleware, 3 service updates, migration, documentation


🛰️ Epic 2: Stellar Payment Monitoring Resilience

Risk: 30s restart = 10–50 missed payment events; bookings stuck in pending
Solution: Persist cursor, handle outages, bulk recovery, automatic reconnection

Key Files:

  • src/utils/stellar-cursor.utils.ts - Persist/load cursor from Redis
  • src/services/stellar.service.ts - Add transaction history fetching
  • src/services/stellar-stream.service.ts - Rewrite with reconnection logic
  • src/jobs/stellar-polling.job.ts - Fallback polling if stream fails 10x
  • src/metrics/stellar-metrics.ts - Prometheus counters & gauges
  • tests/e2e/stellar-resilience.e2e.test.ts - Chaos testing

Acceptance Criteria:

  • ✅ After restart, stream resumes from last cursor
  • ✅ Missed txs within 24h recovered retroactively
  • ✅ Auto-reconnect within 60s (exponential backoff: 1s, 2s, 4s, max 60s)
  • ✅ 10+ failed reconnects → polling mode
  • ✅ No duplicate tx processing
  • ✅ Health endpoint reports status accurately

Deliverables: 3 utilities, 2 service rewrites, 1 new job, metrics, tests, documentation


📚 Epic 3: Learning Path Prerequisite Validation

Risk: Circular dependencies (A→B→C→A) cause infinite loops → timeouts, CPU spikes
Solution: DAG implementation with Kahn's algorithm for cycle detection & topological sorting

Key Files:

  • src/utils/dag.utils.ts - Generic DAG with cycle detection
  • src/services/prerequisite-validator.service.ts - Rewrite with Kahn's algorithm
  • src/services/learning-path.service.ts - Validate on prerequisite creation
  • database/migrations/XXX_learning_path_prerequisites_dag.sql - Adjacency table
  • tests/unit/prerequisite-validator.test.ts - Comprehensive cycle tests

Acceptance Criteria:

  • ✅ Circular prerequisite → HTTP 422 with cycle path (e.g., [A, B, C, A])
  • ✅ Topological sort correct for 50+ node DAG
  • ✅ Ineligible enrollment → HTTP 403 with unmet prerequisites list
  • ✅ Tree query < 200ms for 50-node DAG
  • ✅ All cycle patterns handled: self-ref, 2-node, transitive
  • ✅ Cache invalidates on graph mutation

Deliverables: 1 DAG utility, 2 service rewrites, migration, comprehensive tests


🗓️ Epic 4: Mentor Availability Management

Problem: Mentors can't declare availability; booking assumes 24/7
Solution: Weekly availability slots with timezone support; calendar filtering

Key Files:

  • src/types/availability.types.ts - AvailabilitySlot interface
  • src/services/availability.service.ts - Availability logic & queries
  • src/routes/mentors.routes.ts - Availability endpoints
  • src/services/bookings.service.ts - Integrate availability checks
  • src/utils/timezone.utils.ts - Timezone conversion helpers
  • tests/unit/availability.service.test.ts - Timezone edge cases

Frontend Contract (Frontend repo):

  • AvailabilityEditor component - 24-hour grid for weekly slots
  • Calendar component enhancement - Show only available slots
  • "Contact to schedule" message - If no availability set

Acceptance Criteria:

  • ✅ Mentor sets availability via API
  • ✅ Booking calendar shows only available slots
  • ✅ Timezone conversion correct (Nigeria UTC+1 ↔ EST UTC-5)
  • ✅ Mentors without availability show "Contact to schedule"
  • ✅ Booking to unavailable slot → HTTP 409
  • ✅ Available slots endpoint < 200ms for 7-day range

Deliverables: 1 type file, 2 services, 3 route updates, timezone utilities, frontend contract


Implementation Phases

Phase Week Focus Deliverables
Foundation 1-2 Schemas, types, base utilities Migrations, types, DAG, cursor utils
Core Logic 3-4 Services, middleware, endpoints All service logic, routes, controllers
Testing & Monitoring 5 E2E tests, metrics, documentation Tests, Prometheus metrics, health endpoint
Integration & Rollout 6 Frontend integration, feature flags Component development, soft launch

Risk Mitigation

Critical Risks & Mitigations

Risk Epic Mitigation
Admin lockout if MFA wrong 1 Test thoroughly; backup codes; feature flag
Cursor loss on crash 2 Redis replication; immediate persistence
DAG performance on 100+ nodes 3 Cache aggressively; profile with real data
Timezone off-by-one errors 4 Comprehensive UTC offset tests; DST handling
Stellar stream missing events 2 Run dual-stream for 1 week before cutover

Rollout Strategy

  • Admin MFA: Feature flag (default off) → sandbox → limited admins → all admins
  • Stellar monitoring: Dual-stream 1 week → validate event parity → cutover
  • Learning paths: Non-breaking; cycle check on creation only
  • Mentor availability: Optional; defaults to 24/7 if not set

File Structure

New Files Created (~14 total)

Middleware:
  src/middleware/require-mfa.middleware.ts
  src/middleware/step-up-auth.middleware.ts

Services:
  src/services/availability.service.ts

Jobs:
  src/jobs/stellar-polling.job.ts

Utilities:
  src/utils/stellar-cursor.utils.ts
  src/utils/dag.utils.ts

Types:
  src/types/availability.types.ts

Metrics:
  src/metrics/stellar-metrics.ts

Tests:
  tests/e2e/stellar-resilience.e2e.test.ts
  tests/unit/prerequisite-validator.test.ts
  tests/unit/availability.service.test.ts

Database:
  database/migrations/XXX_admin_mfa_enforcement.sql
  database/migrations/XXX_learning_path_prerequisites_dag.sql
  database/migrations/XXX_mentor_availability.sql

Documentation:
  docs/ADMIN_MFA.md
  docs/STELLAR_RESILIENCE.md
  docs/LEARNING_PATH_DAG.md
  docs/MENTOR_AVAILABILITY.md
  IMPLEMENTATION_PLAN.md
  BRANCH_SUMMARY.md

Modified Files (~15 total)

src/utils/jwt.utils.ts - Add mfa_verified_at claim
src/utils/timezone.utils.ts - Enhance timezone conversion
src/utils/cache-key.utils.ts - Add cache keys
src/services/admin.service.ts - Gate sensitive operations
src/services/learning-path.service.ts - Validate prerequisites
src/services/prerequisite-validator.service.ts - Complete rewrite
src/services/stellar.service.ts - Add history fetching
src/services/stellar-stream.service.ts - Rewrite with reconnection
src/services/bookings.service.ts - Check availability
src/services/stellar.service.ts - Add transaction history
src/controllers/health.controller.ts - Stellar stream status
src/controllers/users.controller.ts - Include availability
src/routes/admin.routes.ts - Apply MFA middleware
src/routes/learning-path.routes.ts - DAG endpoints
src/routes/mentors.routes.ts - Availability endpoints
src/types/api.types.ts - Update AuthenticatedRequest

Testing Strategy

Unit Tests

  • Cycle detection (all patterns): self-ref, 2-node, transitive
  • Topological sort correctness
  • Timezone conversion edge cases (DST, day boundaries)
  • Availability slot validation
  • Rate limiting & lockout logic

E2E Tests

  • Stellar: Stream restart, reconnection, bulk recovery, idempotency
  • Admin: MFA enforcement, step-up, grace period, lockout
  • Learning paths: Enrollment eligibility, unmet prerequisites listing
  • Availability: Booking conflicts, timezone display

Chaos Engineering

  • Kill Redis → Stellar stream recovery
  • Horizon API failure → Exponential backoff, fallback to polling
  • Admin repeated failed auth → Lockout mechanism
  • Concurrent availability updates → Last-write-wins consistency

Success Metrics

Metric Target Epic
Admin unauthorized actions 0 in 30 days 1
Missed payment events 0 in 30 days 2
Stellar reconnect time <5s median 2
Prerequisite query latency <150ms p95 (50-node DAG) 3
Cycles in production 0 (prevented at creation) 3
Mentor availability adoption 80% within 60 days 4

Next Steps

  1. Review this plan - Confirm 4 epics are aligned with business priorities
  2. Assign team members - 4 engineers (1 per epic) + reviewers
  3. Create feature branches - One per epic from this branch
  4. Begin Phase 1 - Migrations, types, utilities (Week 1-2)
  5. Weekly syncs - Track progress, unblock issues

Key Contacts

  • Security Epic Lead (Admin MFA): TBD
  • DevOps Epic Lead (Stellar Monitoring): TBD
  • Backend Architecture Lead (Learning Paths): TBD
  • Product Owner (Mentor Availability): TBD
  • QA Lead: TBD
  • Security Review: TBD

Related Documentation

  • IMPLEMENTATION_PLAN.md - Detailed task-by-task breakdown
  • docs/ADMIN_MFA.md - MFA enforcement policy & flow
  • docs/STELLAR_RESILIENCE.md - Stream recovery architecture
  • docs/LEARNING_PATH_DAG.md - Algorithm complexity & examples
  • docs/MENTOR_AVAILABILITY.md - Availability schema & integration

Status: ✅ Ready for Review & Implementation
Last Updated: July 29, 2026
Branch Created: July 29, 2026