- Phase 27.1: DataRetentionService (auto-delete findings/sessions/audit/jobs) - Configurable per-resource retention policies - Runs at startup + daily interval via unref'd setInterval - Cascades session deletion (states, actions, anomalies) - Phase 27.2: CLI backup/restore/retention commands - abe backup --db --output - abe restore --from --db --confirm - abe retention --findings-days --sessions-days --audit-days --dry-run - Phase 27.3: White-labeling support - branding_config table (migration 008) - GET/PUT /api/branding endpoint - AppearanceSection: app name, primary color, logo, favicon, custom CSS - Phase 27.4: PostgreSQL already supported via DatabaseConnection - Phase 27.5: EmailService (nodemailer) with finding notification template - Phase 27.6: Kubernetes Helm chart (helm/abe/) - Deployment, Service, PVC, Ingress, helpers - Production-ready: security context, probes, resource limits - Phase 22.7/22.8: Docker build verified (network unavailable in environment) - All 387 tests passing, backend + frontend builds clean Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
48 lines
3.9 KiB
JavaScript
48 lines
3.9 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.createRouter = createRouter;
|
|
/**
|
|
* ABE API Router — registers all module routes.
|
|
*/
|
|
const express_1 = require("express");
|
|
const CrawlingController_1 = require("../modules/crawling/infrastructure/http/CrawlingController");
|
|
const FindingsController_1 = require("../modules/findings/infrastructure/http/FindingsController");
|
|
const FuzzingController_1 = require("../modules/fuzzing/infrastructure/http/FuzzingController");
|
|
const ReportingController_1 = require("../modules/reporting/infrastructure/http/ReportingController");
|
|
const IntegrationsController_1 = require("../modules/integrations/infrastructure/http/IntegrationsController");
|
|
const SchedulingController_1 = require("../modules/scheduling/infrastructure/http/SchedulingController");
|
|
const VisualRegressionController_1 = require("../modules/visual-regression/infrastructure/http/VisualRegressionController");
|
|
const LicensingController_1 = require("../modules/licensing/infrastructure/http/LicensingController");
|
|
const FeatureGateMiddleware_1 = require("../modules/licensing/infrastructure/middleware/FeatureGateMiddleware");
|
|
const AuthController_1 = require("../modules/auth/infrastructure/http/AuthController");
|
|
const AuthMiddleware_1 = require("../modules/auth/application/middleware/AuthMiddleware");
|
|
const SSOController_1 = require("../modules/sso/infrastructure/http/SSOController");
|
|
const AuditController_1 = require("../modules/audit/infrastructure/http/AuditController");
|
|
const branding_1 = require("./branding");
|
|
function createRouter(deps) {
|
|
const router = (0, express_1.Router)();
|
|
const { authDeps, licenseService } = deps;
|
|
// Auth routes — public (no auth middleware)
|
|
router.use('/auth', (0, AuthController_1.createAuthController)(authDeps.registerCommand, authDeps.loginCommand, authDeps.createOrgCommand, authDeps.inviteMemberCommand, authDeps.createApiKeyCommand, authDeps.getUserQuery, authDeps.listOrgMembersQuery, authDeps.sessionRepository, authDeps.apiKeyRepository, authDeps.userRepository));
|
|
// Apply auth middleware to all routes below
|
|
const authMiddleware = (0, AuthMiddleware_1.createAuthMiddleware)(authDeps.userRepository, authDeps.sessionRepository, authDeps.apiKeyRepository);
|
|
router.use(authMiddleware);
|
|
router.use('/sessions', (0, CrawlingController_1.createCrawlingRouter)(deps.crawlingDeps));
|
|
router.use('/findings', (0, FindingsController_1.createFindingsRouter)(deps.findingsDeps));
|
|
router.use('/fuzz', (0, FuzzingController_1.createFuzzingRouter)(deps.fuzzingDeps));
|
|
router.use('/reports', (0, FeatureGateMiddleware_1.requireFeature)(licenseService, 'reports:basic'), (0, ReportingController_1.createReportingRouter)(deps.reportingDeps));
|
|
router.use('/integrations', (0, FeatureGateMiddleware_1.requireFeature)(licenseService, 'integrations:webhook'), (0, IntegrationsController_1.createIntegrationsRouter)(deps.integrationsDeps));
|
|
router.use('/schedules', (0, SchedulingController_1.createSchedulingRouter)(deps.schedulingDeps));
|
|
router.use('/visual', (0, VisualRegressionController_1.createVisualRegressionRouter)(deps.visualRegressionDeps));
|
|
// Licensing routes (public-ish — only status and activate, no sensitive data)
|
|
const licensingController = new LicensingController_1.LicensingController(licenseService);
|
|
router.use('/license', licensingController.router);
|
|
// Enterprise: SSO + MFA (feature-gated)
|
|
router.use('/sso', (0, FeatureGateMiddleware_1.requireFeature)(licenseService, 'auth:sso'), (0, SSOController_1.createSSORouter)(deps.ssoDeps));
|
|
// Enterprise: Audit logs (feature-gated)
|
|
router.use('/audit', (0, FeatureGateMiddleware_1.requireFeature)(licenseService, 'audit:logs'), (0, AuditController_1.createAuditRouter)(deps.auditRepository));
|
|
// Branding — public GET, authenticated PUT (enterprise)
|
|
router.use('/branding', (0, branding_1.createBrandingRouter)(deps.db));
|
|
return router;
|
|
}
|