feat: support configuring method and headers in webhook
This commit is contained in:
33
internal/pkg/utils/http/parser.go
Normal file
33
internal/pkg/utils/http/parser.go
Normal file
@@ -0,0 +1,33 @@
|
||||
package httputil
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"net/http"
|
||||
"net/textproto"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// 从表示 HTTP 标头的字符串解析并返回一个 http.Header 对象。
|
||||
//
|
||||
// 入参:
|
||||
// - headers: 表示 HTTP 标头的字符串。
|
||||
//
|
||||
// 出参:
|
||||
// - header: http.Header 对象。
|
||||
// - err: 错误。
|
||||
func ParseHeaders(headers string) (http.Header, error) {
|
||||
str := strings.TrimSpace(headers) + "\r\n\r\n"
|
||||
if len(str) == 4 {
|
||||
return make(http.Header), nil
|
||||
}
|
||||
|
||||
br := bufio.NewReader(strings.NewReader(str))
|
||||
tp := textproto.NewReader(br)
|
||||
|
||||
mimeHeader, err := tp.ReadMIMEHeader()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return http.Header(mimeHeader), err
|
||||
}
|
||||
@@ -199,6 +199,28 @@ func GetOrDefaultBool(dict map[string]any, key string, defaultValue bool) bool {
|
||||
return defaultValue
|
||||
}
|
||||
|
||||
// 以 `map[string]V` 形式从字典中获取指定键的值。
|
||||
//
|
||||
// 入参:
|
||||
// - dict: 字典。
|
||||
// - key: 键。
|
||||
//
|
||||
// 出参:
|
||||
// - 字典中键对应的 `map[string]V` 对象。
|
||||
func GetKVMap[V any](dict map[string]any, key string) map[string]V {
|
||||
if dict == nil {
|
||||
return make(map[string]V)
|
||||
}
|
||||
|
||||
if val, ok := dict[key]; ok {
|
||||
if result, ok := val.(map[string]V); ok {
|
||||
return result
|
||||
}
|
||||
}
|
||||
|
||||
return make(map[string]V)
|
||||
}
|
||||
|
||||
// 以 `map[string]any` 形式从字典中获取指定键的值。
|
||||
//
|
||||
// 入参:
|
||||
@@ -207,16 +229,6 @@ func GetOrDefaultBool(dict map[string]any, key string, defaultValue bool) bool {
|
||||
//
|
||||
// 出参:
|
||||
// - 字典中键对应的 `map[string]any` 对象。
|
||||
func GetMap(dict map[string]any, key string) map[string]any {
|
||||
if dict == nil {
|
||||
return make(map[string]any)
|
||||
}
|
||||
|
||||
if val, ok := dict[key]; ok {
|
||||
if result, ok := val.(map[string]any); ok {
|
||||
return result
|
||||
}
|
||||
}
|
||||
|
||||
return make(map[string]any)
|
||||
func GetKVMapAny(dict map[string]any, key string) map[string]any {
|
||||
return GetKVMap[any](dict, key)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user