Skip to content

Commit 0a67c4f

Browse files
refactor(routes): Complete E1 Route Consolidation (S5-S10)
Create 3 new route packages (rules/, admin/, content/), consolidate MongoDB scan routes into scans/, remove legacy discovery files, and clean up main.py. 10 modular route packages total. Zero breaking API changes.
1 parent cc1a081 commit 0a67c4f

18 files changed

Lines changed: 227 additions & 1414 deletions

backend/app/main.py

Lines changed: 33 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -27,30 +27,28 @@
2727
from .database import get_db_session
2828
from .middleware.metrics import PrometheusMiddleware, background_updater
2929
from .middleware.rate_limiting import get_rate_limiting_middleware
30-
from .routes import ( # noqa: E501; REMOVED route consolidation notes:; - api_keys, auth, mfa: Consolidated into routes/auth/ (E1-S4); - hosts, host_*_discovery: Consolidated into routes/hosts/ (Phase 3); - mongodb_scan_api, rule_scanning, scan_config_api, scan_templates: Consolidated into routes/scans/ (Phase 2); - compliance, drift_events, owca: Consolidated into routes/compliance/ (Phase 4); - plugin_management, webhooks: Consolidated into routes/integrations/ (Phase 4); - ssh_debug, ssh_settings: Consolidated into routes/ssh/ (Phase 4); - bulk_remediation_routes, remediation_api: Moved to SecureOps/AEGIS (ORSA subsystem)
30+
31+
# Flat route modules (not yet organized into packages)
32+
from .routes import (
3133
adaptive_scheduler,
32-
audit,
3334
baselines,
3435
bulk_operations,
3536
capabilities,
36-
compliance_rules_api,
37-
content,
38-
credentials,
3937
health_monitoring,
4038
integration_metrics,
4139
mongodb_test,
4240
monitoring,
4341
os_discovery,
4442
remediation_callback,
4543
remediation_provider,
46-
rule_management,
4744
scans,
48-
scap_import,
49-
users,
5045
version,
51-
xccdf_api,
5246
)
5347

48+
# Import admin from new modular package (E1-S6 Route Consolidation)
49+
# This package consolidates users.py, audit.py, and credentials.py
50+
from .routes.admin import router as admin_router
51+
5452
# Import auth from new modular package (E1-S4 Route Consolidation)
5553
# This package consolidates auth.py, mfa.py, and api_keys.py into a single
5654
# modular package with login, MFA, and API key endpoints
@@ -61,6 +59,10 @@
6159
# modular package with intelligence, OWCA, and drift endpoints
6260
from .routes.compliance import router as compliance_router
6361

62+
# Import content from new modular package (E1-S7 Route Consolidation)
63+
# This package consolidates content.py, scap_import.py, and xccdf_api.py
64+
from .routes.content import router as content_pkg_router
65+
6466
# Import host_groups from new modular package (Phase 1 API Standardization)
6567
# This package consolidates host_groups.py and group_compliance.py into a single
6668
# modular package with CRUD and scanning endpoints aligned with frontend scanService.ts
@@ -77,6 +79,11 @@
7779
# modular package with webhooks and plugins endpoints
7880
from .routes.integrations import router as integrations_router
7981

82+
# Import rules from new modular package (E1-S5 Route Consolidation)
83+
# This package consolidates rule_management.py, rule_scanning.py, and
84+
# compliance_rules_api.py into a single modular package
85+
from .routes.rules import router as rules_router
86+
8087
# Import SSH from new modular package (Phase 4 API Standardization)
8188
# This package consolidates ssh_settings.py and ssh_debug.py into a single
8289
# modular package with settings and debug endpoints
@@ -560,98 +567,41 @@ async def metrics() -> PlainTextResponse:
560567
# Capabilities and system information
561568
app.include_router(capabilities.router, prefix="/api", tags=["System Capabilities"])
562569

563-
# MongoDB and SCAP endpoints (consolidated from v1)
570+
# MongoDB test endpoints
564571
app.include_router(mongodb_test.router, prefix="/api/mongodb", tags=["MongoDB Integration Test"])
565-
app.include_router(scap_import.router, prefix="/api", tags=["SCAP Import"])
566-
app.include_router(rule_management.router, prefix="/api", tags=["Enhanced Rule Management"])
567-
app.include_router(compliance_rules_api.router, prefix="/api", tags=["MongoDB Compliance Rules"])
568-
# mongodb_scan_api - REMOVED: Consolidated into routes/scans/mongodb.py (Phase 2)
569-
# Endpoints now available at /api/scans/mongodb/*
570-
571-
# XCCDF and scanning services (consolidated from v1)
572-
app.include_router(xccdf_api.router, prefix="/api/xccdf", tags=["XCCDF Generator"])
573-
# remediation_api - REMOVED: Moved to SecureOps/AEGIS (ORSA subsystem)
574-
# scan_config_api - REMOVED: Consolidated into routes/scans/config.py and templates.py (Phase 2)
575-
# Endpoints now available at /api/scans/config/* and /api/scans/templates/*
572+
573+
# Health and monitoring
576574
app.include_router(health_monitoring.router, prefix="/api/health-monitoring", tags=["Health Monitoring"])
575+
app.include_router(monitoring.router, prefix="/api", tags=["Host Monitoring"])
577576

578577
# Remediation provider (registration interface for ORSA adapters)
579578
app.include_router(remediation_provider.router, prefix="/api/remediation", tags=["Remediation Provider"])
579+
app.include_router(remediation_callback.router, prefix="/api", tags=["AEGIS Integration"])
580580

581-
# Core API routes
582-
# auth - Modular package (E1-S4) - consolidates login, MFA, API keys
581+
# Modular route packages
582+
# Each package aggregates related sub-routers with their own prefixes
583583
app.include_router(auth_router, prefix="/api/auth", tags=["Authentication"])
584-
# Hosts - Modular package with all host-related endpoints (Phase 3 API Standardization)
585-
# Includes: crud, discovery (basic, network, security, compliance)
586-
# The router already has prefix="/hosts" defined in routes/hosts/__init__.py
587584
app.include_router(hosts_router, prefix="/api", tags=["Hosts"])
588-
app.include_router(baselines.router, tags=["Baseline Management"])
589-
# drift_events - REMOVED: Consolidated into routes/compliance/drift.py (Phase 4)
590-
# Endpoints now available at /api/compliance/drift/*
591-
# Scans - Modular package with all scan-related endpoints (Phase 2 API Standardization)
592-
# Includes: compliance, crud, reports, bulk, validation, config, templates, rules, mongodb
593-
# The router already has prefix="/scans" defined in routes/scans/__init__.py
594585
app.include_router(scans.router, prefix="/api", tags=["Security Scans"])
595-
# owca - REMOVED: Consolidated into routes/compliance/owca.py (Phase 4)
596-
# Endpoints now available at /api/compliance/owca/*
597-
app.include_router(content.router, prefix="/api/content", tags=["Legacy Content"])
598-
app.include_router(monitoring.router, prefix="/api", tags=["Host Monitoring"])
586+
app.include_router(compliance_router, prefix="/api", tags=["Compliance"])
587+
app.include_router(rules_router, prefix="/api", tags=["Rules"])
588+
app.include_router(admin_router, prefix="/api", tags=["Administration"])
589+
app.include_router(content_pkg_router, prefix="/api", tags=["Content"])
590+
app.include_router(host_groups_router, prefix="/api", tags=["Host Groups"])
591+
app.include_router(ssh_router, prefix="/api", tags=["SSH"])
592+
app.include_router(integrations_router, prefix="/api", tags=["Integrations"])
593+
594+
# Remaining flat route modules (not yet packaged)
595+
app.include_router(baselines.router, tags=["Baseline Management"])
599596
app.include_router(adaptive_scheduler.router, prefix="/api", tags=["Adaptive Scheduler"])
600597
app.include_router(os_discovery.router, prefix="/api", tags=["OS Discovery"])
601598
app.include_router(system_settings_router, prefix="/api", tags=["System Settings"])
602-
app.include_router(users.router, prefix="/api", tags=["User Management"])
603-
app.include_router(audit.router, prefix="/api", tags=["Audit Logs"])
604-
# Host Groups - Modular package with CRUD and scanning endpoints
605-
# The router already has prefix="/host-groups" defined in the package
606-
app.include_router(host_groups_router, prefix="/api", tags=["Host Groups"])
607-
# scan_templates - REMOVED: Consolidated into routes/scans/templates.py (Phase 2)
608-
# Endpoints now available at /api/scans/templates/*
609-
# webhooks - REMOVED: Consolidated into routes/integrations/webhooks.py (Phase 4)
610-
# Endpoints now available at /api/integrations/webhooks/*
611-
app.include_router(credentials.router, prefix="/api", tags=["Credential Sharing"])
612-
# api_keys - REMOVED: Consolidated into auth_router (E1-S4)
613-
app.include_router(remediation_callback.router, prefix="/api", tags=["AEGIS Integration"])
614599
app.include_router(
615600
integration_metrics.router,
616601
prefix="/api/integration/metrics",
617602
tags=["Integration Metrics"],
618603
)
619604
app.include_router(bulk_operations.router, prefix="/api/bulk", tags=["Bulk Operations"])
620-
# app.include_router(terminal.router, tags=["Terminal"]) # Terminal module not available
621-
# Compliance - Modular package with all compliance-related endpoints (Phase 4 API Standardization)
622-
# Includes: intelligence (semantic rules, framework data), owca (scoring), drift (detection)
623-
# The router already has prefix="/compliance" defined in routes/compliance/__init__.py
624-
app.include_router(compliance_router, prefix="/api", tags=["Compliance"])
625-
# rule_scanning - REMOVED: Consolidated into routes/scans/rules.py (Phase 2)
626-
# Endpoints now available at /api/scans/rules/*
627-
# SSH - Modular package with all SSH-related endpoints (Phase 4 API Standardization)
628-
# Includes: settings (policy, known-hosts), debug (test-authentication, paramiko-log)
629-
# The router already has prefix="/ssh" defined in routes/ssh/__init__.py
630-
app.include_router(ssh_router, prefix="/api", tags=["SSH"])
631-
# ssh_settings - REMOVED: Consolidated into routes/ssh/settings.py (Phase 4)
632-
# Endpoints now available at /api/ssh/settings/*
633-
# ssh_debug - REMOVED: Consolidated into routes/ssh/debug.py (Phase 4)
634-
# Endpoints now available at /api/ssh/debug/*
635-
# host_network_discovery - REMOVED: Consolidated into routes/hosts/discovery.py (Phase 3)
636-
# Endpoints now available at /api/hosts/{host_id}/discovery/network/*
637-
# group_compliance.py removed - functionality consolidated into host_groups package
638-
# See: routes/host_groups/scans.py for group scanning endpoints
639-
# host_compliance_discovery - REMOVED: Consolidated into routes/hosts/discovery.py (Phase 3)
640-
# Endpoints now available at /api/hosts/{host_id}/discovery/compliance/*
641-
# host_discovery - REMOVED: Consolidated into routes/hosts/discovery.py (Phase 3)
642-
# Endpoints now available at /api/hosts/{host_id}/discovery/basic/*
643-
# host_security_discovery - REMOVED: Consolidated into routes/hosts/discovery.py (Phase 3)
644-
# Endpoints now available at /api/hosts/{host_id}/discovery/security/*
645-
# Integrations - Modular package with all integration-related endpoints (Phase 4 API Standardization)
646-
# Includes: webhooks (CRUD, deliveries, test), plugins (import, execute, statistics)
647-
# The router already has prefix="/integrations" defined in routes/integrations/__init__.py
648-
app.include_router(integrations_router, prefix="/api", tags=["Integrations"])
649-
# plugin_management - REMOVED: Consolidated into routes/integrations/plugins.py (Phase 4)
650-
# Endpoints now available at /api/integrations/plugins/*
651-
# bulk_remediation_routes - REMOVED: Moved to SecureOps/AEGIS (ORSA subsystem)
652-
653-
# QueryBuilder validation endpoints (temporary testing) - DISABLED: module not available
654-
# app.include_router(test_querybuilder.router, prefix="/api", tags=["QueryBuilder Validation"])
655605

656606
# Register security routes if available
657607
if automated_fixes:
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
"""
2+
Administration API Package
3+
4+
Consolidates administrative REST API endpoints.
5+
6+
Package Structure:
7+
admin/
8+
├── __init__.py # This file - router aggregation
9+
├── users.py # User management (/users/*)
10+
├── audit.py # Audit logs (/audit/*)
11+
└── credentials.py # Credential sharing (/credentials/*)
12+
13+
Migration Status (E1-S6 - Route Consolidation):
14+
- users.py -> admin/users.py
15+
- audit.py -> admin/audit.py
16+
- credentials.py -> admin/credentials.py
17+
18+
Usage:
19+
from app.routes.admin import router
20+
app.include_router(router, prefix="/api")
21+
"""
22+
23+
from fastapi import APIRouter
24+
25+
# Create main router that aggregates all sub-routers
26+
router = APIRouter(tags=["Administration"])
27+
28+
# Import sub-routers from modular files
29+
try:
30+
from .audit import router as audit_router
31+
from .credentials import router as credentials_router
32+
from .users import router as users_router
33+
34+
# Include all sub-routers into main router
35+
# User management endpoints (/users/*)
36+
router.include_router(users_router)
37+
38+
# Audit log endpoints (/audit/*)
39+
router.include_router(audit_router)
40+
41+
# Credential sharing endpoints (/credentials/*)
42+
router.include_router(credentials_router)
43+
44+
except ImportError as e:
45+
import logging
46+
47+
logger = logging.getLogger(__name__)
48+
logger.error(f"Failed to load admin sub-routers: {e}")
49+
50+
__all__ = [
51+
"router",
52+
]
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@
1111
from sqlalchemy import text
1212
from sqlalchemy.orm import Session
1313

14-
from ..auth import get_current_user
15-
from ..database import get_db
16-
from ..rbac import RBACManager, UserRole
14+
from ...auth import get_current_user
15+
from ...database import get_db
16+
from ...rbac import RBACManager, UserRole
1717

1818
logger = logging.getLogger(__name__)
1919

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@
1919
from sqlalchemy import text
2020
from sqlalchemy.orm import Session
2121

22-
from ..auth import get_current_user
23-
from ..database import get_db
24-
from ..utils.logging_security import sanitize_id_for_log
22+
from ...auth import get_current_user
23+
from ...database import get_db
24+
from ...utils.logging_security import sanitize_id_for_log
2525

2626
logger = logging.getLogger(__name__)
2727
security = HTTPBearer(auto_error=False)
Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,12 @@
1313
from sqlalchemy import text
1414
from sqlalchemy.orm import Session
1515

16-
from ..auth import get_current_user, pwd_context
17-
from ..database import get_db
18-
from ..rbac import Permission, RBACManager, UserRole, require_permission
19-
from ..utils.logging_security import sanitize_id_for_log
20-
from ..utils.query_builder import QueryBuilder
21-
from ..utils.user_helpers import format_user_not_found_error, serialize_user_row
16+
from ...auth import get_current_user, pwd_context
17+
from ...database import get_db
18+
from ...rbac import Permission, RBACManager, UserRole, require_permission
19+
from ...utils.logging_security import sanitize_id_for_log
20+
from ...utils.query_builder import QueryBuilder
21+
from ...utils.user_helpers import format_user_not_found_error, serialize_user_row
2222

2323
logger = logging.getLogger(__name__)
2424

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
"""
2+
Content API Package
3+
4+
Consolidates SCAP content management REST API endpoints.
5+
6+
Package Structure:
7+
content/
8+
├── __init__.py # This file - router aggregation
9+
├── scap.py # SCAP content management (/content/*)
10+
├── import_.py # SCAP import (/scap-import/*)
11+
└── xccdf.py # XCCDF generation (/xccdf/*)
12+
13+
Migration Status (E1-S7 - Route Consolidation):
14+
- content.py -> content/scap.py
15+
- scap_import.py -> content/import_.py
16+
- xccdf_api.py -> content/xccdf.py
17+
18+
Usage:
19+
from app.routes.content import router
20+
app.include_router(router, prefix="/api")
21+
"""
22+
23+
from fastapi import APIRouter
24+
25+
# Create main router that aggregates all sub-routers
26+
router = APIRouter(tags=["Content"])
27+
28+
# Import sub-routers from modular files
29+
try:
30+
from .import_ import router as import_router
31+
from .scap import router as scap_router
32+
from .xccdf import router as xccdf_router
33+
34+
# SCAP content management endpoints (/content/*)
35+
# scap.py has no prefix; apply it here to preserve /api/content/* URLs
36+
router.include_router(scap_router, prefix="/content", tags=["Legacy Content"])
37+
38+
# SCAP import endpoints (/scap-import/*)
39+
# import_.py already has prefix="/scap-import"
40+
router.include_router(import_router)
41+
42+
# XCCDF generation endpoints (/xccdf/*)
43+
# xccdf.py has no prefix; apply it here to preserve /api/xccdf/* URLs
44+
router.include_router(xccdf_router, prefix="/xccdf", tags=["XCCDF Generator"])
45+
46+
except ImportError as e:
47+
import logging
48+
49+
logger = logging.getLogger(__name__)
50+
logger.error(f"Failed to load content sub-routers: {e}")
51+
52+
__all__ = [
53+
"router",
54+
]
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
from fastapi import APIRouter, Depends, HTTPException
1515
from pydantic import BaseModel, Field
1616

17-
from ..services.content import ContentImporter
17+
from ...services.content import ContentImporter
1818

1919
router = APIRouter(prefix="/scap-import", tags=["SCAP Import"])
2020

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
from fastapi.security import HTTPBearer
1313
from pydantic import BaseModel
1414

15-
from ..utils.file_security import sanitize_filename, validate_file_extension
15+
from ...utils.file_security import sanitize_filename, validate_file_extension
1616

1717
logger = logging.getLogger(__name__)
1818
security = HTTPBearer()
Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,18 @@
1414
from fastapi import APIRouter, Depends, HTTPException
1515
from sqlalchemy.orm import Session
1616

17-
from ..auth import get_current_user
18-
from ..database import get_db
19-
from ..models.readiness_models import ReadinessCheckType
20-
from ..schemas.xccdf_schemas import (
17+
from ...auth import get_current_user
18+
from ...database import get_db
19+
from ...models.readiness_models import ReadinessCheckType
20+
from ...schemas.xccdf_schemas import (
2121
XCCDFBenchmarkRequest,
2222
XCCDFBenchmarkResponse,
2323
XCCDFTailoringRequest,
2424
XCCDFTailoringResponse,
2525
)
26-
from ..services.host_validator.readiness_validator import ReadinessValidatorService
27-
from ..services.mongo_integration_service import get_mongo_service
28-
from ..services.xccdf import XCCDFGeneratorService
26+
from ...services.host_validator.readiness_validator import ReadinessValidatorService
27+
from ...services.mongo_integration_service import get_mongo_service
28+
from ...services.xccdf import XCCDFGeneratorService
2929

3030
router = APIRouter()
3131
logger = logging.getLogger(__name__)

0 commit comments

Comments
 (0)