Cybersecurity-Projects/PROJECTS/intermediate/siem-dashboard/backend/app/schemas/log_event.py

69 lines
1.5 KiB
Python

"""
©AngelaMos | 2026
log_event.py
"""
from typing import Any
from pydantic import BaseModel, Field
from app.config import settings
class LogIngestRequest(BaseModel):
"""
Raw log event submitted for ingestion
"""
source_type: str
event_type: str | None = None
source_ip: str | None = None
dest_ip: str | None = None
source_port: int | None = None
dest_port: int | None = None
hostname: str | None = None
username: str | None = None
mitre_tactic: str | None = None
mitre_technique: str | None = None
message: str | None = None
metadata: dict[str, Any] | None = None
model_config = {"extra": "allow"}
class LogQueryParams(BaseModel):
"""
Filters for listing log events
"""
page: int = Field(default = 1, ge = 1)
per_page: int = Field(
default = settings.DEFAULT_PAGE_SIZE,
ge = 1,
le = settings.MAX_PAGE_SIZE,
)
source_type: str | None = None
severity: str | None = None
source_ip: str | None = None
event_type: str | None = None
class LogSearchParams(BaseModel):
"""
Parameters for full text log search
"""
q: str = Field(min_length = 1)
page: int = Field(default = 1, ge = 1)
per_page: int = Field(
default = settings.DEFAULT_PAGE_SIZE,
ge = 1,
le = settings.MAX_PAGE_SIZE,
)
class PivotParams(BaseModel):
"""
Query params for forensic pivot lookups
"""
ip: str | None = None
username: str | None = None
hostname: str | None = None