47 lines
1.2 KiB
Go
47 lines
1.2 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
)
|
|
|
|
func (s *MCPServer) handleGetSiteRoutes(id interface{}, args map[string]interface{}) {
|
|
domain, _ := args["domain"].(string)
|
|
config, err := s.client.GetConfig()
|
|
if err != nil {
|
|
s.sendError(id, -32000, err.Error())
|
|
return
|
|
}
|
|
|
|
apps, _ := config["apps"].(map[string]interface{})
|
|
httpApps, _ := apps["http"].(map[string]interface{})
|
|
servers, _ := httpApps["servers"].(map[string]interface{})
|
|
|
|
var output string
|
|
for _, server := range servers {
|
|
srv, _ := server.(map[string]interface{})
|
|
routes, _ := srv["routes"].([]interface{})
|
|
|
|
for _, route := range routes {
|
|
routeMap, _ := route.(map[string]interface{})
|
|
matches, _ := routeMap["match"].([]interface{})
|
|
|
|
for _, match := range matches {
|
|
matchMap, _ := match.(map[string]interface{})
|
|
hosts, _ := matchMap["host"].([]interface{})
|
|
if len(hosts) > 0 {
|
|
d, _ := hosts[0].(string)
|
|
if d == domain {
|
|
output = fmt.Sprintf("Routes for %s:\n\n", domain)
|
|
data, _ := json.MarshalIndent(routeMap, "", " ")
|
|
output += string(data)
|
|
s.sendTextResult(id, output)
|
|
return
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
s.sendError(id, -32000, fmt.Sprintf("site not found: %s", domain))
|
|
}
|