mirror of
https://github.com/mblanke/ThreatHunt.git
synced 2026-03-01 14:00:20 -05:00
Complete backend infrastructure and authentication system
Co-authored-by: mblanke <9078342+mblanke@users.noreply.github.com>
This commit is contained in:
60
backend/app/api/routes/ingestion.py
Normal file
60
backend/app/api/routes/ingestion.py
Normal file
@@ -0,0 +1,60 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user