- 前端: 所有界面显示、i18n 文本、组件中的品牌名称 - 后端: 服务层、设置默认值、邮件模板、安装向导 - 数据库: 迁移脚本注释 - 保持功能完全一致,仅更改品牌名称 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
47 lines
1.0 KiB
Go
47 lines
1.0 KiB
Go
package geminicli
|
|
|
|
import "strings"
|
|
|
|
const maxLogBodyLen = 2048
|
|
|
|
func SanitizeBodyForLogs(body string) string {
|
|
body = truncateBase64InMessage(body)
|
|
if len(body) > maxLogBodyLen {
|
|
body = body[:maxLogBodyLen] + "...[truncated]"
|
|
}
|
|
return body
|
|
}
|
|
|
|
func truncateBase64InMessage(message string) string {
|
|
const maxBase64Length = 50
|
|
|
|
result := message
|
|
offset := 0
|
|
for {
|
|
idx := strings.Index(result[offset:], ";base64,")
|
|
if idx == -1 {
|
|
break
|
|
}
|
|
actualIdx := offset + idx
|
|
start := actualIdx + len(";base64,")
|
|
|
|
end := start
|
|
for end < len(result) && isBase64Char(result[end]) {
|
|
end++
|
|
}
|
|
|
|
if end-start > maxBase64Length {
|
|
result = result[:start+maxBase64Length] + "...[truncated]" + result[end:]
|
|
offset = start + maxBase64Length + len("...[truncated]")
|
|
continue
|
|
}
|
|
offset = end
|
|
}
|
|
|
|
return result
|
|
}
|
|
|
|
func isBase64Char(c byte) bool {
|
|
return (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9') || c == '+' || c == '/' || c == '='
|
|
}
|