Cybersecurity-Projects/PROJECTS/api-security-scanner/backend/schemas/scan_schemas.py

63 lines
1.3 KiB
Python

"""
ⒸAngelaMos | 2025
Scan model API validation and serialization
"""
from __future__ import annotations
from pydantic import (
BaseModel,
ConfigDict,
Field,
HttpUrl,
)
from datetime import datetime
from config import settings
from core.enums import TestType
from .test_result_schemas import TestResultResponse
class ScanRequest(BaseModel):
"""
Schema for creating a new security scan
"""
target_url: HttpUrl = Field(max_length=settings.URL_MAX_LENGTH)
auth_token: str | None = None
tests_to_run: list[TestType] = Field(min_length=1)
max_requests: int = Field(
default=settings.DEFAULT_MAX_REQUESTS,
ge=1,
le=settings.SCANNER_MAX_CONCURRENT_REQUESTS,
)
class ScanResponse(BaseModel):
"""
Schema for scan data in API responses
"""
model_config = ConfigDict(from_attributes=True)
id: int
user_id: int
target_url: str
scan_date: datetime
created_at: datetime
test_results: list[TestResultResponse] = []
@property
def total_tests(self) -> int:
"""
Total number of tests run
"""
return len(self.test_results)
@property
def vulnerabilities_found(self) -> int:
"""
Number of vulnerabilities found
"""
return sum(1 for r in self.test_results if r.status == "vulnerable")