Files
oc-catalog/routers/router.go

106 lines
3.0 KiB
Go
Raw Normal View History

2024-07-26 13:07:25 +02:00
// @APIVersion 1.0.0
// @Title oc-catalog
// @Description OpenCloud catalog
// @Contact admin@o-cloud.io
// @TermsOfServiceUrl http://cloud.o-forge.io/
2024-10-03 09:39:40 +02:00
// @License AGPL
// @LicenseUrl https://www.gnu.org/licenses/agpl-3.0.html
2024-07-26 13:07:25 +02:00
package routers
import (
"encoding/json"
"net/http"
2024-07-26 13:07:25 +02:00
"oc-catalog/controllers"
"oc-catalog/infrastructure"
"strings"
2024-07-26 13:07:25 +02:00
oclib "cloud.o-forge.io/core/oc-lib"
"cloud.o-forge.io/core/oc-lib/tools"
2024-07-26 13:07:25 +02:00
beego "github.com/beego/beego/v2/server/web"
)
// wsSearchHandler retourne un http.HandlerFunc qui émet un message NATS puis ouvre la connexion WS.
// dataType == -1 signifie toutes les ressources (ResourceController).
func wsSearchHandler(dataType int) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
parts := strings.Split(strings.TrimSuffix(r.URL.Path, "/"), "/")
search := parts[len(parts)-1]
t := ""
if len(parts) >= 3 {
t = parts[len(parts)-3]
}
user, _, _ := oclib.ExtractTokenInfo(*r)
b, _ := json.Marshal(map[string]string{"search": search, "type": t})
infrastructure.EmitNATS(user, tools.PropalgationMessage{
Action: tools.PB_SEARCH,
DataType: dataType,
Payload: b,
})
controllers.Websocket(user, w, r)
}
}
2024-07-26 13:07:25 +02:00
func init() {
ns := beego.NewNamespace("/oc/",
2026-01-12 14:37:37 +01:00
beego.NSNamespace("/generic",
beego.NSInclude(
&controllers.GeneralController{},
),
),
2025-06-24 09:13:29 +02:00
beego.NSNamespace("/purchase",
beego.NSInclude(
&controllers.PurchaseController{},
),
),
beego.NSNamespace("/resource",
beego.NSInclude(
&controllers.ResourceController{},
),
),
2024-07-26 13:07:25 +02:00
beego.NSNamespace("/data",
beego.NSInclude(
&controllers.DataController{},
),
),
2024-11-07 13:42:19 +01:00
beego.NSNamespace("/compute",
2024-07-26 13:07:25 +02:00
beego.NSInclude(
2024-11-07 13:42:19 +01:00
&controllers.ComputeController{},
2024-07-26 13:07:25 +02:00
),
),
beego.NSNamespace("/storage",
beego.NSInclude(
&controllers.StorageController{},
),
),
beego.NSNamespace("/processing",
beego.NSInclude(
&controllers.ProcessingController{},
),
),
beego.NSNamespace("/workflow",
beego.NSInclude(
&controllers.WorkflowController{},
),
),
2025-01-17 17:03:32 +01:00
beego.NSNamespace("/enum",
beego.NSInclude(
&controllers.EnumController{},
),
),
2024-07-26 13:07:25 +02:00
beego.NSNamespace("/version",
beego.NSInclude(
&controllers.VersionController{},
),
),
)
beego.AddNamespace(ns)
// Routes WebSocket hors du pipeline Beego (évite le WriteHeader parasite)
beego.Handler("/oc/resource/decentralized/:type/search/:search", wsSearchHandler(-1))
beego.Handler("/oc/compute/decentralized/:type/search/:search", wsSearchHandler(tools.COMPUTE_RESOURCE.EnumIndex()))
beego.Handler("/oc/data/decentralized/:type/search/:search", wsSearchHandler(tools.DATA_RESOURCE.EnumIndex()))
beego.Handler("/oc/processing/decentralized/:type/search/:search", wsSearchHandler(tools.PROCESSING_RESOURCE.EnumIndex()))
beego.Handler("/oc/storage/decentralized/:type/search/:search", wsSearchHandler(tools.STORAGE_RESOURCE.EnumIndex()))
beego.Handler("/oc/workflow/decentralized/:type/search/:search", wsSearchHandler(tools.WORKFLOW_RESOURCE.EnumIndex()))
2024-07-26 13:07:25 +02:00
}