Spaces:
Sleeping
Sleeping
File size: 2,839 Bytes
ce8cc64 ec543fe e06fba8 ce8cc64 e06fba8 ce8cc64 ec543fe e06fba8 ce8cc64 c9dfb34 e06fba8 ec543fe e06fba8 c9dfb34 e06fba8 c9dfb34 e06fba8 c9dfb34 ec543fe c9dfb34 ec543fe c9dfb34 e06fba8 ce8cc64 e06fba8 c9dfb34 e06fba8 ec543fe c9dfb34 e06fba8 ce8cc64 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
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) |