Spaces:
Runtime error
Runtime error
| """KAVACH API — FastAPI endpoint for external integration.""" | |
| from fastapi import FastAPI, HTTPException, UploadFile, File | |
| from fastapi.middleware.cors import CORSMiddleware | |
| from pydantic import BaseModel, Field | |
| from typing import Optional, List | |
| import time | |
| from modules.charaka import CharakaDiagnosticEngine | |
| from modules.nyaya_engine import NyayaRuleEngine | |
| from modules.gandharva import GandharvaSonarDefense | |
| from modules.akasha import AkashaLedger | |
| app = FastAPI( | |
| title="🔱 KAVACH API", | |
| description="Sovereign Vedic Cyber Defense Intelligence", | |
| version="2.0.0" | |
| ) | |
| app.add_middleware(CORSMiddleware, allow_origins=["*"], allow_methods=["*"], allow_headers=["*"]) | |
| # Initialize engines | |
| charaka = CharakaDiagnosticEngine() | |
| nyaya = NyayaRuleEngine() | |
| gandharva = GandharvaSonarDefense() | |
| akasha = AkashaLedger() | |
| # Models | |
| class NetworkEvent(BaseModel): | |
| source_ip: str = Field(..., description="Source IP address") | |
| dest_ip: Optional[str] = Field(None, description="Destination IP") | |
| port: Optional[int] = Field(None, description="Port number") | |
| payload: Optional[str] = Field(None, description="Request payload") | |
| event_type: Optional[str] = Field("unknown", description="Event type") | |
| bytes_sent: Optional[int] = Field(0, description="Bytes transmitted") | |
| class ScanRequest(BaseModel): | |
| events: List[NetworkEvent] | |
| context: Optional[dict] = Field({}, description="Additional context") | |
| class ThreatResponse(BaseModel): | |
| verdict: str | |
| diagnosis: dict | |
| rule_matched: Optional[str] | |
| severity: int | |
| action: str | |
| timestamp: float | |
| # Routes | |
| def root(): | |
| return { | |
| "name": "KAVACH API", | |
| "version": "2.0.0", | |
| "status": "ACTIVE", | |
| "modules": ["charaka", "nyaya", "gandharva", "akasha"], | |
| "sutra": "सत्यमेव जयते" | |
| } | |
| def scan_network(request: ScanRequest): | |
| """Scan network events for threats.""" | |
| results = [] | |
| for event in request.events: | |
| event_dict = event.model_dump() | |
| # Charaka diagnosis | |
| diagnosis = charaka.diagnose([event_dict]) | |
| # Nyaya firewall | |
| payload = event_dict.get("payload", "") | |
| rule_match = nyaya.evaluate(payload, request.context) | |
| verdict = "BLOCK" if (rule_match and rule_match["verdict"] in ("BLOCK", "RATE_LIMIT")) else "ALLOW" | |
| results.append({ | |
| "verdict": verdict, | |
| "diagnosis": diagnosis, | |
| "rule_matched": rule_match["rule_id"] if rule_match else None, | |
| "severity": diagnosis.get("severity", 0), | |
| "action": "BLOCKED" if verdict == "BLOCK" else "ALLOWED", | |
| "timestamp": time.time() | |
| }) | |
| # Record in Akasha | |
| akasha.record("api_scan", {"events_count": len(request.events), "results": len(results)}, "api") | |
| return results[0] if results else {"verdict": "ALLOW", "severity": 0} | |
| async def scan_audio(file: UploadFile = File(...)): | |
| """Analyze audio file for sonic threats.""" | |
| audio_data = await file.read() | |
| result = gandharva.analyze(audio_data, file.filename) | |
| akasha.record("audio_scan", result, "api") | |
| return result | |
| def system_status(): | |
| """Get complete KAVACH system status.""" | |
| return { | |
| "nyaya": nyaya.stats(), | |
| "akasha": akasha.get_stats(), | |
| "charaka_diagnoses": len(charaka.diagnosis_history), | |
| "gandharva_signatures": len(gandharva.sonic_threat_db) | |
| } | |
| def health_check(): | |
| return {"status": "healthy", "timestamp": time.time()} | |
| if __name__ == "__main__": | |
| import uvicorn | |
| uvicorn.run(app, host="0.0.0.0", port=8000) | |