130 lines
4.3 KiB
Python
130 lines
4.3 KiB
Python
|
|
"""
|
||
|
|
审计规则 Schema
|
||
|
|
"""
|
||
|
|
|
||
|
|
from typing import Optional, Dict, Any, List
|
||
|
|
from pydantic import BaseModel, Field
|
||
|
|
from datetime import datetime
|
||
|
|
|
||
|
|
|
||
|
|
# ==================== 审计规则 ====================
|
||
|
|
|
||
|
|
class AuditRuleBase(BaseModel):
|
||
|
|
"""审计规则基础Schema"""
|
||
|
|
rule_code: str = Field(..., min_length=1, max_length=50, description="规则标识")
|
||
|
|
name: str = Field(..., min_length=1, max_length=200, description="规则名称")
|
||
|
|
description: Optional[str] = Field(None, description="规则描述")
|
||
|
|
category: str = Field(..., description="规则类别: security/bug/performance/style/maintainability")
|
||
|
|
severity: str = Field("medium", description="严重程度: critical/high/medium/low")
|
||
|
|
custom_prompt: Optional[str] = Field(None, description="自定义检测提示词")
|
||
|
|
fix_suggestion: Optional[str] = Field(None, description="修复建议模板")
|
||
|
|
reference_url: Optional[str] = Field(None, max_length=500, description="参考链接")
|
||
|
|
enabled: bool = Field(True, description="是否启用")
|
||
|
|
sort_order: int = Field(0, description="排序权重")
|
||
|
|
|
||
|
|
|
||
|
|
class AuditRuleCreate(AuditRuleBase):
|
||
|
|
"""创建审计规则"""
|
||
|
|
pass
|
||
|
|
|
||
|
|
|
||
|
|
class AuditRuleUpdate(BaseModel):
|
||
|
|
"""更新审计规则"""
|
||
|
|
rule_code: Optional[str] = Field(None, min_length=1, max_length=50)
|
||
|
|
name: Optional[str] = Field(None, min_length=1, max_length=200)
|
||
|
|
description: Optional[str] = None
|
||
|
|
category: Optional[str] = None
|
||
|
|
severity: Optional[str] = None
|
||
|
|
custom_prompt: Optional[str] = None
|
||
|
|
fix_suggestion: Optional[str] = None
|
||
|
|
reference_url: Optional[str] = None
|
||
|
|
enabled: Optional[bool] = None
|
||
|
|
sort_order: Optional[int] = None
|
||
|
|
|
||
|
|
|
||
|
|
class AuditRuleResponse(AuditRuleBase):
|
||
|
|
"""审计规则响应"""
|
||
|
|
id: str
|
||
|
|
rule_set_id: str
|
||
|
|
created_at: Optional[datetime] = None
|
||
|
|
updated_at: Optional[datetime] = None
|
||
|
|
|
||
|
|
class Config:
|
||
|
|
from_attributes = True
|
||
|
|
|
||
|
|
|
||
|
|
# ==================== 审计规则集 ====================
|
||
|
|
|
||
|
|
class AuditRuleSetBase(BaseModel):
|
||
|
|
"""审计规则集基础Schema"""
|
||
|
|
name: str = Field(..., min_length=1, max_length=100, description="规则集名称")
|
||
|
|
description: Optional[str] = Field(None, description="规则集描述")
|
||
|
|
language: str = Field("all", description="适用语言")
|
||
|
|
rule_type: str = Field("custom", description="规则集类型: security/quality/performance/custom")
|
||
|
|
severity_weights: Optional[Dict[str, int]] = Field(
|
||
|
|
default_factory=lambda: {"critical": 10, "high": 5, "medium": 2, "low": 1},
|
||
|
|
description="严重程度权重"
|
||
|
|
)
|
||
|
|
is_active: bool = Field(True, description="是否启用")
|
||
|
|
sort_order: int = Field(0, description="排序权重")
|
||
|
|
|
||
|
|
|
||
|
|
class AuditRuleSetCreate(AuditRuleSetBase):
|
||
|
|
"""创建审计规则集"""
|
||
|
|
rules: Optional[List[AuditRuleCreate]] = Field(default_factory=list, description="规则列表")
|
||
|
|
|
||
|
|
|
||
|
|
class AuditRuleSetUpdate(BaseModel):
|
||
|
|
"""更新审计规则集"""
|
||
|
|
name: Optional[str] = Field(None, min_length=1, max_length=100)
|
||
|
|
description: Optional[str] = None
|
||
|
|
language: Optional[str] = None
|
||
|
|
rule_type: Optional[str] = None
|
||
|
|
severity_weights: Optional[Dict[str, int]] = None
|
||
|
|
is_default: Optional[bool] = None
|
||
|
|
is_active: Optional[bool] = None
|
||
|
|
sort_order: Optional[int] = None
|
||
|
|
|
||
|
|
|
||
|
|
class AuditRuleSetResponse(AuditRuleSetBase):
|
||
|
|
"""审计规则集响应"""
|
||
|
|
id: str
|
||
|
|
is_default: bool = False
|
||
|
|
is_system: bool = False
|
||
|
|
created_by: Optional[str] = None
|
||
|
|
created_at: Optional[datetime] = None
|
||
|
|
updated_at: Optional[datetime] = None
|
||
|
|
rules: List[AuditRuleResponse] = Field(default_factory=list)
|
||
|
|
rules_count: int = 0
|
||
|
|
enabled_rules_count: int = 0
|
||
|
|
|
||
|
|
class Config:
|
||
|
|
from_attributes = True
|
||
|
|
|
||
|
|
|
||
|
|
class AuditRuleSetListResponse(BaseModel):
|
||
|
|
"""审计规则集列表响应"""
|
||
|
|
items: List[AuditRuleSetResponse]
|
||
|
|
total: int
|
||
|
|
|
||
|
|
|
||
|
|
class AuditRuleSetExport(BaseModel):
|
||
|
|
"""规则集导出格式"""
|
||
|
|
name: str
|
||
|
|
description: Optional[str]
|
||
|
|
language: str
|
||
|
|
rule_type: str
|
||
|
|
severity_weights: Dict[str, int]
|
||
|
|
rules: List[AuditRuleBase]
|
||
|
|
export_version: str = "1.0"
|
||
|
|
|
||
|
|
|
||
|
|
class AuditRuleSetImport(BaseModel):
|
||
|
|
"""规则集导入格式"""
|
||
|
|
name: str
|
||
|
|
description: Optional[str] = None
|
||
|
|
language: str = "all"
|
||
|
|
rule_type: str = "custom"
|
||
|
|
severity_weights: Optional[Dict[str, int]] = None
|
||
|
|
rules: List[AuditRuleCreate]
|