From 1f1c7df474b13604c5112bf8daa5e5a40a15479a Mon Sep 17 00:00:00 2001 From: mooring Date: Tue, 3 Jun 2025 21:37:46 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A0=B9=E6=8D=AECopilot=E6=8F=90=E7=A4=BA?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=A3=80=E6=B5=8B=E9=80=BB=E8=BE=91=E5=8F=8A?= =?UTF-8?q?=E6=84=8F=E5=A4=96=E6=83=85=E5=86=B5=EF=BC=8C=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E5=8D=95=E7=8B=AC=E6=9B=BF=E6=8D=A2=EF=BC=8C=E8=99=BD=E7=84=B6?= =?UTF-8?q?params["body"]=E5=8F=8Aparams["subject"]=E5=89=8D=E7=AB=AF?= =?UTF-8?q?=E4=BC=9A=E6=A3=80=E6=B5=8B=EF=BC=8C=E8=BF=99=E6=A0=B7=E5=86=99?= =?UTF-8?q?=E5=90=8E=E7=AB=AF=E8=84=9A=E6=9C=AC=E6=9B=B4=E9=80=9A=E7=94=A8?= =?UTF-8?q?=E7=81=B5=E6=B4=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/internal/report/webhook.go | 38 +++++++++++++++++++----------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/backend/internal/report/webhook.go b/backend/internal/report/webhook.go index 46dcde1..1b81149 100644 --- a/backend/internal/report/webhook.go +++ b/backend/internal/report/webhook.go @@ -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)