package controllers import ( cx "context" "net/http" "oc-catalog/infrastructure" oclib "cloud.o-forge.io/core/oc-lib" w "cloud.o-forge.io/core/oc-lib/models/workflow" tools "cloud.o-forge.io/core/oc-lib/tools" beego "github.com/beego/beego/v2/server/web" "github.com/beego/beego/v2/server/web/context" "golang.org/x/net/websocket" ) // Operations about compute type GeneralController struct { beego.Controller } // @Title GetAll // @Description find compute by id // @Param file formData file true "File to upload" // @Success 200 {compute} models.workflow // @Failure 406 {string} string "Bad request" // @router / [get] func (o *GeneralController) GetAll() { user, peerID, groups := oclib.ExtractTokenInfo(*o.Ctx.Request) file, _, err := o.Ctx.Request.FormFile("file") if err != nil { o.Data["json"] = map[string]interface{}{ "data": nil, "code": 406, "error": err.Error(), } o.ServeJSON() return } newWorkflow := &w.Workflow{} req := &tools.APIRequest{ Username: user, PeerID: peerID, Groups: groups, } newWorkflow, err = newWorkflow.ExtractFromPlantUML(file, req) if err != nil { o.Data["json"] = map[string]interface{}{ "data": nil, "code": 406, "error": err.Error(), } o.ServeJSON() return } o.Data["json"] = map[string]interface{}{ "data": newWorkflow, "code": 200, "error": nil, } o.ServeJSON() } func Websocket(ctx cx.Context, user string, r *context.Response, w *http.Request) { websocket.Handler(func(ws *websocket.Conn) { defer ws.Close() for { if msg, ok := <-infrastructure.SearchStream[user]; !ok || websocket.Message.Send(ws, msg) != nil { return } } }).ServeHTTP(r, w) }