// @APIVersion 1.0.0 // @Title oc-peer // @Description Manage OpenCloud peers // @Contact admin@o-cloud.io // @TermsOfServiceUrl http://cloud.o-forge.io/ // @License AGPL // @LicenseUrl https://www.gnu.org/licenses/agpl-3.0.html package routers import ( "encoding/json" "net/http" "oc-peer/controllers" "oc-peer/infrastructure" "strings" oclib "cloud.o-forge.io/core/oc-lib" "cloud.o-forge.io/core/oc-lib/tools" beego "github.com/beego/beego/v2/server/web" ) func init() { ns := beego.NewNamespace("/oc/", beego.NSNamespace("/status", beego.NSInclude( &controllers.StatusController{}, ), ), beego.NSInclude( &controllers.PeerController{}, ), beego.NSNamespace("/version", beego.NSInclude( &controllers.VersionController{}, ), ), ) beego.AddNamespace(ns) // WebSocket route enregistrée en dehors du pipeline Beego // beego.Handler bypasse le controller pipeline (pas de WriteHeader parasite) beego.Handler("/oc/decentralized/search/:search", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { parts := strings.Split(strings.TrimSuffix(r.URL.Path, "/"), "/") search := parts[len(parts)-1] user, _, _ := oclib.ExtractTokenInfo(*r) b, _ := json.Marshal(map[string]string{"search": search}) infrastructure.EmitNATS(user, tools.PropalgationMessage{ Action: tools.PB_SEARCH, DataType: tools.PEER.EnumIndex(), Payload: b, }) controllers.Websocket(r.Context(), user, w, r) })) }