Initial curated Unraid-AppOps-Gateway source from 3bd6f6fee310125bfbb4d4650389a817f498724d
This commit is contained in:
commit
1dfbca08a1
528 files changed
+131054
No files matched your search
@@ -0,0 +1,87 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Any, Literal
|
||||
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
|
||||
Severity = Literal['info', 'low', 'medium', 'high', 'critical']
|
||||
Confidence = Literal['low', 'medium', 'high']
|
||||
ReviewStatus = Literal['healthy', 'warning', 'critical', 'partial', 'unknown']
|
||||
FindingStatus = Literal['open', 'acknowledged', 'dismissed', 'resolved']
|
||||
RecommendationStatus = Literal['open', 'snoozed', 'dismissed', 'accepted']
|
||||
SecurityReviewScope = Literal['all', 'exposure', 'auth', 'secrets', 'policies', 'connectors', 'audit', 'unraid', 'media']
|
||||
|
||||
|
||||
class SecurityEvidence(BaseModel):
|
||||
source: str
|
||||
label: str
|
||||
value: Any = None
|
||||
observed: Any = None
|
||||
expected: Any = None
|
||||
referenceId: str | None = None
|
||||
redacted: bool = False
|
||||
|
||||
|
||||
class SecuritySuggestedAction(BaseModel):
|
||||
label: str
|
||||
type: Literal['link', 'policy_draft', 'approval_request', 'open_page', 'run_readonly_check']
|
||||
actionId: str | None = None
|
||||
target: str | None = None
|
||||
policyDecision: str = 'allowed'
|
||||
risk: str = 'low'
|
||||
href: str | None = None
|
||||
executable: bool = False
|
||||
|
||||
|
||||
class SecurityFinding(BaseModel):
|
||||
id: str
|
||||
title: str
|
||||
description: str
|
||||
severity: Severity
|
||||
confidence: Confidence
|
||||
category: Literal['exposure', 'auth_coverage', 'coverage', 'connector_config', 'secrets', 'policies', 'connectors', 'audit', 'inventory', 'unraid', 'media']
|
||||
affectedResources: list[str] = Field(default_factory=list)
|
||||
evidence: list[SecurityEvidence] = Field(default_factory=list)
|
||||
suggestedActions: list[SecuritySuggestedAction] = Field(default_factory=list)
|
||||
status: FindingStatus = 'open'
|
||||
createdAt: str
|
||||
riskReason: str
|
||||
links: list[dict[str, Any]] = Field(default_factory=list)
|
||||
|
||||
|
||||
class SecurityRecommendation(BaseModel):
|
||||
id: str
|
||||
title: str
|
||||
description: str
|
||||
severity: Severity
|
||||
confidence: Confidence
|
||||
evidence: list[SecurityEvidence] = Field(default_factory=list)
|
||||
affectedResources: list[str] = Field(default_factory=list)
|
||||
suggestedAction: str
|
||||
suggestedActions: list[SecuritySuggestedAction] = Field(default_factory=list)
|
||||
policyDecision: str = 'allowed'
|
||||
actionTarget: str | None = None
|
||||
canAutoApply: bool = False
|
||||
status: RecommendationStatus = 'open'
|
||||
|
||||
|
||||
class SecurityReviewSummary(BaseModel):
|
||||
status: ReviewStatus
|
||||
score: int
|
||||
generatedAt: str
|
||||
dataCompleteness: dict[str, Any]
|
||||
criticalFindings: int
|
||||
highFindings: int = 0
|
||||
mediumFindings: int = 0
|
||||
warningFindings: int
|
||||
infoFindings: int
|
||||
recommendationsCount: int
|
||||
connectedSources: list[str]
|
||||
scoreBreakdown: dict[str, Any] = Field(default_factory=dict)
|
||||
|
||||
|
||||
class SecurityReviewResult(BaseModel):
|
||||
summary: SecurityReviewSummary
|
||||
findings: list[SecurityFinding]
|
||||
recommendations: list[SecurityRecommendation]
|
||||
Reference in new issue
Block a user