MCPcopy Create free account
hub / github.com/1Panel-dev/1Panel / OperationResolveMeta

Function OperationResolveMeta

agent/middleware/operation.go:50–98  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

48}
49
50func OperationResolveMeta() gin.HandlerFunc {
51 return func(c *gin.Context) {
52 if c.GetHeader(headerNeedOperationResolve) != "1" {
53 c.Next()
54 return
55 }
56
57 metaMap, err := loadOperationMeta()
58 if err != nil {
59 c.Next()
60 return
61 }
62 reqPath := strings.TrimPrefix(c.Request.URL.Path, "/api/v2")
63 meta, ok := metaMap[reqPath]
64 if !ok || len(meta.BeforeFunctions) == 0 {
65 c.Next()
66 return
67 }
68
69 values := make(map[string]interface{})
70 if len(meta.BodyKeys) > 0 {
71 body, err := io.ReadAll(c.Request.Body)
72 if err == nil {
73 c.Request.Body = io.NopCloser(bytes.NewBuffer(body))
74 bodyMap := make(map[string]interface{})
75 if strings.Contains(c.Request.Header.Get("Content-Type"), "multipart/form-data") {
76 bodyMap, _ = parseMultipart(body, c.Request.Header.Get("Content-Type"))
77 } else {
78 decoder := json.NewDecoder(bytes.NewReader(body))
79 decoder.UseNumber()
80 _ = decoder.Decode(&bodyMap)
81 }
82 for _, key := range meta.BodyKeys {
83 if value, ok := bodyMap[key]; ok {
84 values[key] = value
85 }
86 }
87 }
88 }
89
90 resolved, err := resolveOperationValues(reqPath, values, meta.BeforeFunctions)
91 if err == nil && len(resolved) > 0 {
92 if data, err := json.Marshal(resolved); err == nil {
93 c.Header(headerOperationResolved, base64.RawURLEncoding.EncodeToString(data))
94 }
95 }
96 c.Next()
97 }
98}
99
100func loadOperationMeta() (map[string]operationMeta, error) {
101 logMetaOnce.Do(func() {

Callers

nothing calls this directly

Calls 5

loadOperationMetaFunction · 0.85
resolveOperationValuesFunction · 0.85
NextMethod · 0.80
parseMultipartFunction · 0.70
GetMethod · 0.65

Tested by

no test coverage detected