From 45f2351b2f1f1e97b35d344d16ee1df2e8adf2e7 Mon Sep 17 00:00:00 2001 From: mr Date: Fri, 27 Mar 2026 12:41:31 +0100 Subject: [PATCH] OC LIB -> EXTRA --- entrypoint.go | 4 ++-- tools/api.go | 20 +++++++++++++++----- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/entrypoint.go b/entrypoint.go index e000480..300e100 100644 --- a/entrypoint.go +++ b/entrypoint.go @@ -218,7 +218,7 @@ func ExtractTokenInfo(request http.Request) (string, string, []string) { return "", "", []string{} } -func InitAPI(appName string) { +func InitAPI(appName string, extraRoutes ...map[string][]string) { InitDaemon(appName) beego.BConfig.Listen.HTTPPort = config.GetConfig().APIPort beego.BConfig.WebConfig.DirectoryIndex = true @@ -232,7 +232,7 @@ func InitAPI(appName string) { }) beego.InsertFilter("*", beego.BeforeRouter, c) api := &tools.API{} - api.Discovered(beego.BeeApp.Handlers.GetAllControllerInfo()) + api.Discovered(beego.BeeApp.Handlers.GetAllControllerInfo(), extraRoutes...) } // diff --git a/tools/api.go b/tools/api.go index 8656d87..4485c89 100644 --- a/tools/api.go +++ b/tools/api.go @@ -60,16 +60,16 @@ func (s State) String() string { type API struct{} -func (a *API) Discovered(infos []*beego.ControllerInfo) { +func (a *API) Discovered(infos []*beego.ControllerInfo, extra ...map[string][]string) { respondToDiscovery := func(resp NATSResponse) { var m map[string]interface{} json.Unmarshal(resp.Payload, &m) if len(m) == 0 { - a.SubscribeRouter(infos) + a.SubscribeRouter(infos, extra...) } } a.ListenRouter(respondToDiscovery) - a.SubscribeRouter(infos) + a.SubscribeRouter(infos, extra...) } // GetState returns the state of the API @@ -99,11 +99,12 @@ func (a *API) ListenRouter(exec func(msg NATSResponse)) { }) } -func (a *API) SubscribeRouter(infos []*beego.ControllerInfo) { +func (a *API) SubscribeRouter(infos []*beego.ControllerInfo, extra ...map[string][]string) { nats := NewNATSCaller() + appPrefix := "/" + strings.ReplaceAll(config.GetAppName(), "oc-", "") discovery := map[string][]string{} for _, info := range infos { - path := strings.ReplaceAll(info.GetPattern(), "/oc/", "/"+strings.ReplaceAll(config.GetAppName(), "oc-", "")) + path := strings.ReplaceAll(info.GetPattern(), "/oc/", appPrefix+"/") for k, v := range info.GetMethod() { if discovery[path] == nil { discovery[path] = []string{} @@ -115,6 +116,15 @@ func (a *API) SubscribeRouter(infos []*beego.ControllerInfo) { } } } + for _, extraRoutes := range extra { + for rawPath, methods := range extraRoutes { + path := strings.ReplaceAll(rawPath, "/oc/", appPrefix+"/") + if discovery[path] == nil { + discovery[path] = []string{} + } + discovery[path] = append(discovery[path], methods...) + } + } b, _ := json.Marshal(discovery) go nats.SetNATSPub(DISCOVERY, NATSResponse{