Files
sub2api/backend/internal/securityaudit/prompt_issue_summary.go
T
李建琦 6d655c9903
Release / update-version (push) Has been cancelled
Release / build-frontend (push) Has been cancelled
Release / release (push) Has been cancelled
Release / sync-version-file (push) Has been cancelled
CI / shell (push) Canceled after 0s
CI / test (push) Canceled after 0s
CI / frontend (push) Canceled after 0s
CI / golangci-lint (push) Canceled after 0s
Security Scan / backend-security (push) Canceled after 0s
Security Scan / frontend-security (push) Canceled after 0s
Sub2API v1.0 - AI API 网关(二开初始版本,基于上游 Wei-Shaw/sub2api)
2026-08-21 18:30:13 +08:00

70 lines
2.1 KiB
Go

package securityaudit
import (
"crypto/sha256"
"encoding/hex"
)
func BuildIssueSummaries(result NormalizedResult) []IssueSummary {
resultCategories := result.Categories
if len(resultCategories) == 0 {
resultCategories = result.MatchedScanners
}
summaries := make([]IssueSummary, 0, len(resultCategories)+len(result.UnknownCategories))
for _, category := range resultCategories {
definition, ok := ScannerCatalog[category]
if !ok {
continue
}
evidence := RedactPreview(result.ScannerEvidence[category], 160)
if evidence == "" {
evidence = definition.Label
}
digest := sha256.Sum256([]byte(evidence))
summaries = append(summaries, IssueSummary{
Category: category, ScannerID: category, Title: definition.LabelZH,
Description: definition.Description, Severity: string(result.RiskLevel),
SeverityLabel: riskLabelZH(result.RiskLevel), Action: string(result.Action),
ActionLabel: actionLabelZH(result.Action), Code: "prompt_audit_" + category,
Score: result.ScannerScores[category], Evidence: evidence,
EvidenceHash: hex.EncodeToString(digest[:]),
})
}
for _, category := range result.UnknownCategories {
evidence := "unknown_unsafe"
digest := sha256.Sum256([]byte(evidence + ":" + category))
summaries = append(summaries, IssueSummary{
Category: category, ScannerID: "unknown_unsafe", Title: "未知高风险分类",
Description: "审计节点返回了未知但不可忽略的高风险分类", Severity: string(RiskCritical),
SeverityLabel: riskLabelZH(RiskCritical), Action: string(ActionBlock),
ActionLabel: actionLabelZH(ActionBlock), Code: "prompt_audit_unknown_unsafe",
Score: 1, Evidence: evidence, EvidenceHash: hex.EncodeToString(digest[:]),
})
}
return summaries
}
func riskLabelZH(risk RiskLevel) string {
switch risk {
case RiskCritical:
return "严重"
case RiskHigh:
return "高"
case RiskMedium:
return "中"
default:
return "低"
}
}
func actionLabelZH(action Action) string {
switch action {
case ActionBlock:
return "阻止"
case ActionWarn:
return "警告"
default:
return "允许"
}
}