CyberForge / src /models /threat.py
Replit Deployment
Deployment from Replit
bb6d7b4
"""
Model for storing threat information discovered in dark web monitoring.
"""
from sqlalchemy import Column, String, Text, Integer, Float, DateTime, Enum
from sqlalchemy.orm import relationship
import enum
from datetime import datetime
from src.models.base import BaseModel
class ThreatSeverity(enum.Enum):
"""Severity levels for threats."""
CRITICAL = "Critical"
HIGH = "High"
MEDIUM = "Medium"
LOW = "Low"
INFORMATIONAL = "Informational"
class ThreatCategory(enum.Enum):
"""Categories of threats."""
DATA_BREACH = "Data Breach"
CREDENTIAL_LEAK = "Credential Leak"
VULNERABILITY = "Vulnerability"
MALWARE = "Malware"
PHISHING = "Phishing"
IDENTITY_THEFT = "Identity Theft"
RANSOMWARE = "Ransomware"
DARK_WEB_MENTION = "Dark Web Mention"
SOCIAL_ENGINEERING = "Social Engineering"
INSIDER_THREAT = "Insider Threat"
APT = "Advanced Persistent Threat"
OTHER = "Other"
class ThreatStatus(enum.Enum):
"""Status of a threat."""
NEW = "New"
INVESTIGATING = "Investigating"
CONFIRMED = "Confirmed"
MITIGATED = "Mitigated"
RESOLVED = "Resolved"
FALSE_POSITIVE = "False Positive"
class Threat(BaseModel):
"""Model for threats discovered in dark web monitoring."""
__tablename__ = "threats"
# Threat metadata
title = Column(String(255), nullable=False)
description = Column(Text, nullable=False)
severity = Column(Enum(ThreatSeverity), nullable=False)
category = Column(Enum(ThreatCategory), nullable=False)
status = Column(Enum(ThreatStatus), nullable=False, default=ThreatStatus.NEW)
# Source information
source_url = Column(String(1024))
source_name = Column(String(255))
source_type = Column(String(100))
discovered_at = Column(DateTime, default=datetime.utcnow)
# Affected entity
affected_entity = Column(String(255))
affected_entity_type = Column(String(100))
# Risk assessment
confidence_score = Column(Float, default=0.0)
risk_score = Column(Float, default=0.0)
# Relationships
indicators = relationship("Indicator", back_populates="threat", cascade="all, delete-orphan")
alerts = relationship("Alert", back_populates="threat", cascade="all, delete-orphan")
def __repr__(self):
return f"<Threat(id={self.id}, title={self.title}, severity={self.severity})>"