cibertest / app.py
doctorlinux's picture
Upload 5 files
c9dfb34 verified
Raw History Blame Contribute Delete
2.84 kB
from fastapi import FastAPI
from fastapi.responses import HTMLResponse
from fastapi.staticfiles import StaticFiles
from pydantic import BaseModel
from typing import List
app = FastAPI()
app.mount("/static", StaticFiles(directory="."), name="static")
class DomainScore(BaseModel):
name: str
score: int
class AnalysisRequest(BaseModel):
overall: int
domains: List[DomainScore]
@app.post("/analyze")
async def analyze(data: AnalysisRequest):
analysis = f"""
🔒 **ANÁLISIS AVANZADO DE CIBERSEGURIDAD - DOCTOR LINUX**
**PUNTAJE GLOBAL:** {data.overall}%
**EVALUACIÓN ESTRATÉGICA:**
{"✅ POSTURA SÓLIDA - Controles robustos implementados" if data.overall >= 80 else
"⚠️ POSTURA MEDIA - Se requieren mejoras en controles críticos" if data.overall >= 60 else
"🚨 RIESGO ELEVADO - Atención inmediata requerida en múltiples áreas"}
**ANÁLISIS DETALLADO POR DOMINIO:**
{chr(10).join([f"• {domain.name}: {domain.score}% - {get_domain_analysis(domain.name, domain.score)}" for domain in data.domains])}
**RIESGOS IDENTIFICADOS:**
{get_risk_analysis(data.domains)}
**RECOMENDACIONES PRIORITARIAS:**
1. Implementar controles básicos en áreas críticas
2. Establecer monitoreo continuo 24/7
3. Desarrollar plan de respuesta a incidentes
4. Realizar auditoría de seguridad profunda
5. Capacitar equipo en mejores prácticas
**ROADMAP SUGERIDO:**
• SEMANA 1: Contención de riesgos críticos
• SEMANA 2-4: Implementación controles básicos
• MES 2-3: Mejora de madurez operacional
• MES 4-6: Optimización y automatización
---
*Análisis generado por Doctor Linux - Expertos en Ciberseguridad Operativa*
"""
return {"analysis": analysis}
def get_domain_analysis(name, score):
if score >= 80:
return "Control robusto - Mantener y documentar"
elif score >= 60:
return "Control aceptable - Mejorar procesos"
else:
return "Control crítico - Acción inmediata requerida"
def get_risk_analysis(domains):
critical = [d for d in domains if d.score < 60]
medium = [d for d in domains if 60 <= d.score < 80]
analysis = ""
if critical:
analysis += "🚨 RIESGOS CRÍTICOS:\n"
analysis += chr(10).join([f" - {d.name} ({d.score}%): Exposición alta\n" for d in critical])
if medium:
analysis += "⚠️ RIESGOS MEDIOS:\n"
analysis += chr(10).join([f" - {d.name} ({d.score}%): Mejora necesaria\n" for d in medium])
return analysis
@app.get("/")
async def read_root():
try:
with open("index.html", "r", encoding="utf-8") as f:
return HTMLResponse(content=f.read())
except:
return HTMLResponse(content="<h1>Error: Archivo index.html no encontrado</h1>")
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=7860)