mirror of
https://github.com/mblanke/ThreatHunt.git
synced 2026-03-01 14:00:20 -05:00
61 lines
1.4 KiB
Python
61 lines
1.4 KiB
Python
from fastapi import APIRouter, Depends, HTTPException, status
|
|
from sqlalchemy.orm import Session
|
|
from pydantic import BaseModel
|
|
from typing import Optional, Dict, Any
|
|
|
|
from app.core.database import get_db
|
|
from app.core.deps import get_current_active_user, get_tenant_id
|
|
from app.models.user import User
|
|
from app.models.host import Host
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
class IngestionData(BaseModel):
|
|
hostname: str
|
|
data: Dict[str, Any]
|
|
|
|
|
|
class IngestionResponse(BaseModel):
|
|
message: str
|
|
host_id: int
|
|
|
|
|
|
@router.post("/ingest", response_model=IngestionResponse)
|
|
async def ingest_data(
|
|
ingestion: IngestionData,
|
|
current_user: User = Depends(get_current_active_user),
|
|
tenant_id: int = Depends(get_tenant_id),
|
|
db: Session = Depends(get_db)
|
|
):
|
|
"""
|
|
Ingest data from Velociraptor
|
|
|
|
Creates or updates host information scoped to the user's tenant.
|
|
"""
|
|
# Find or create host
|
|
host = db.query(Host).filter(
|
|
Host.hostname == ingestion.hostname,
|
|
Host.tenant_id == tenant_id
|
|
).first()
|
|
|
|
if host:
|
|
# Update existing host
|
|
host.host_metadata = ingestion.data
|
|
else:
|
|
# Create new host
|
|
host = Host(
|
|
hostname=ingestion.hostname,
|
|
tenant_id=tenant_id,
|
|
host_metadata=ingestion.data
|
|
)
|
|
db.add(host)
|
|
|
|
db.commit()
|
|
db.refresh(host)
|
|
|
|
return {
|
|
"message": "Data ingested successfully",
|
|
"host_id": host.id
|
|
}
|