mirror of https://github.com/allinssl/allinssl
根据Copilot提示优化检测逻辑及意外情况,支持单独替换,虽然params["body"]及params["subject"]前端会检测,这样写后端脚本更通用灵活
parent
d45e6c4f63
commit
1f1c7df474
|
@ -184,20 +184,30 @@ func NotifyWebHook(params map[string]any) error {
|
|||
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)
|
||||
escapeStr := func(s string) string {
|
||||
b, _ := json.Marshal(s)
|
||||
if len(b) >= 2 {
|
||||
return string(b[1 : len(b)-1])
|
||||
}
|
||||
if strings.Contains(config.Data, "{body}") {
|
||||
config.Data = strings.ReplaceAll(config.Data, "{body}", bodyStr)
|
||||
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)
|
||||
|
|
Loading…
Reference in New Issue