// @APIVersion 1.0.0 // @Title oc-catalog API // @Description Backend of the oc-search project // @Contact opencloud@irt-saintexupery.com //// @SecurityDefinition jwtAPIToken apiKey Authorization header "API authentication with JWT tokens" package routers import ( "encoding/json" "io/ioutil" "os" "strings" "cloud.o-forge.io/core/oc-catalog/controllers" "cloud.o-forge.io/core/oc-catalog/services" "github.com/beego/beego/v2/core/logs" bee "github.com/beego/bee/v2/generate/swaggergen" "github.com/beego/beego/v2/adapter/swagger" beego "github.com/beego/beego/v2/server/web" "github.com/beego/beego/v2/server/web/context" ) var rootapi swagger.Swagger func Init() { // Remove old swagger comments err := os.Remove("routers/commentsRouter_controllers.go") if err != nil { logs.Warning("Couldn't remove comments file: " + err.Error()) } ns := beego.NewNamespace("/v1", beego.NSNamespace("/user", beego.NSInclude( &controllers.UserController{}, ), ), beego.NSNamespace("/data", beego.NSInclude( &controllers.DataController{}, ), ), beego.NSNamespace("/computing", beego.NSInclude( &controllers.ComputingController{}, ), ), beego.NSNamespace("/datacenter", beego.NSInclude( &controllers.DatacenterController{}, ), ), beego.NSNamespace("/storage", beego.NSInclude( &controllers.StorageController{}, ), ), beego.NSNamespace("/search", beego.NSInclude( &controllers.SearchController{}, ), ), beego.NSNamespace("/workspace", beego.NSInclude( &controllers.WorkspaceController{}, ), ), beego.NSNamespace("/workflow", beego.NSInclude( &controllers.WorkflowController{}, ), ), beego.NSNamespace("/schedule", beego.NSInclude( &controllers.ScheduleController{}, ), ), ) // Namespace containing useful Path such as ping default_ns := beego.NewNamespace("/",beego.NSInclude(&controllers.MainController{})) beego.AddNamespace(ns) beego.AddNamespace(default_ns) beego.Get("/", func(ctx *context.Context) { ctx.Output.Body([]byte(services.DC_NAME)) }) // Force regenerate swagger before consuming the data bee.GenerateDocs(".") // Open our jsonFile swaggerSchemaPath := "swagger/swagger.json" swaggerFile, err := os.Open(swaggerSchemaPath) // if we os.Open returns an error then handle it if err != nil { logs.Critical("Error opening %v: %v", swaggerSchemaPath, err) panic(err) } // defer the closing of our jsonFile so that we can parse it later on defer swaggerFile.Close() byteValue, err := ioutil.ReadAll(swaggerFile) if err != nil { logs.Critical("Error reading %v: %v", swaggerSchemaPath, err) panic(err) } json.Unmarshal(byteValue, &rootapi) // To simplify match of Paths, we must adapt swagger path representation to beego router // For example: /path/{myID} will be /path/:myID for k, v := range rootapi.Paths { if strings.ContainsAny(k, "{}") { newKey := strings.Replace(k, "{", ":", -1) newKey = strings.Replace(newKey, "}", "", -1) rootapi.Paths[newKey] = v delete(rootapi.Paths, k) } } // Init some extra stuff initAuthMiddleware() initUglyFixes() }