根据Copilot提示优化检测逻辑及意外情况,支持单独替换,虽然params["body"]及params["subject"]前端会检测,这样写后端脚本更通用灵活

pull/185/head
mooring 2025-06-03 21:37:46 +08:00
parent d45e6c4f63
commit 1f1c7df474
1 changed files with 24 additions and 14 deletions

View File

@ -183,23 +183,33 @@ func NotifyWebHook(params map[string]any) error {
if err != nil {
return fmt.Errorf("解析配置失败: %v", err)
}
if params["subject"] != nil && params["body"] != nil {
subjStr, ok1 := params["subject"].(string)
bodyStr, ok2 := params["body"].(string)
if ok1 && ok2 {
subjStr = strings.ReplaceAll(subjStr, `"`, `\"`)
bodyStr = strings.ReplaceAll(bodyStr, `"`, `\"`)
if strings.Contains(config.Data, "{subject}") {
config.Data = strings.ReplaceAll(config.Data, "{subject}", subjStr)
}
if strings.Contains(config.Data, "{body}") {
config.Data = strings.ReplaceAll(config.Data, "{body}", bodyStr)
}
config.Data = strings.ReplaceAll(config.Data, "\n", `\n`)
escapeStr := func(s string) string {
b, _ := json.Marshal(s)
if len(b) >= 2 {
return string(b[1 : len(b)-1])
}
return ""
}
if subjectVal, exists := params["subject"]; exists && subjectVal != nil {
if subjStr, ok := subjectVal.(string); ok && len(subjStr) > 0 {
config.Data = strings.ReplaceAll(config.Data, "{subject}", escapeStr(subjStr))
}
}
if bodyVal, exists := params["body"]; exists && bodyVal != nil {
if bodyStr, ok := bodyVal.(string); ok && len(bodyStr) > 0 {
config.Data = strings.ReplaceAll(config.Data, "{body}", escapeStr(bodyStr))
}
}
config.Data = strings.ReplaceAll(config.Data, "\n", `\n`)
if !json.Valid([]byte(config.Data)) {
return fmt.Errorf("通知主题或通知内容包含特殊字符,消息配置字段替换失败")
}
reporter := NewWebHookReporter(&config, logger)
httpctx := context.Background()
err = reporter.Send(httpctx)