package routes import ( "log" "net/http" "path" "personalwebsite/apps" "personalwebsite/libs" "personalwebsite/routewde" "personalwebsite/wde" "personalwebsite/webfilesystem" "time" "github.com/gin-contrib/cors" "github.com/gin-contrib/location" "github.com/gin-gonic/gin" ) func PrivateRoutes(webfs *webfilesystem.WebFileSystem, webde *wde.WDE, appsStorage *apps.ApplicationsStorage) { router := gin.New() router.Use(location.Default()) router.LoadHTMLGlob("templates/**/*") router.Static("/res", "resources") // Set a lower memory limit for multipart forms (default is 32 MiB) router.MaxMultipartMemory = 8 << 20 // 8 MiB router.GET("/", func(ctx *gin.Context) { ctx.HTML(http.StatusOK, "index.tmpl", gin.H{}) }) systemGroup := router.Group("system") { libsGroup := systemGroup.Group("libs") { imgLibGroup := libsGroup.Group("img") { imgLib := libs.NewImgLib(webfs) imgLib.PublicRoutes(imgLibGroup) } catLibGroup := libsGroup.Group("cat") { catLib := libs.NewCatLib(webfs) catLib.PublicRoutes(catLibGroup) } appsStorageGroup := libsGroup.Group("apps") { appsStorage.Route(appsStorageGroup) } } wdeGroup := systemGroup.Group("wde") { routewde.PublicRoutes(wdeGroup, webde) } fsGroup := systemGroup.Group("fs") { webfs.PrivateRoutes(fsGroup) } systemGroup.GET("/loadApp", func(ctx *gin.Context) { appPath := ctx.Query("path") if appPath == "" { ctx.Status(http.StatusBadRequest) return } appBundleData := webfilesystem.DirectoryData{} appBundle, err := webfs.Read(appPath, &appBundleData) if err != nil { ctx.Status(http.StatusInternalServerError) return } if appBundle.Type != "directory" { ctx.Status(http.StatusBadRequest) return } appManifestData := apps.ApplicationManifest{} appManifestHeader, err := webfs.Read(path.Join(appPath, ".appmanifest"), &appManifestData) if err != nil { ctx.Status(http.StatusInternalServerError) return } if appManifestHeader.Type != "application-manifest" { ctx.Status(http.StatusBadRequest) return } ctx.JSON(http.StatusOK, appManifestData) }) } appsGroup := router.Group("app") { for _, app := range appsStorage.Apps { appsRoutes := appsGroup.Group(app.GetAppID()) app.PrivateRoutes(appsRoutes) } } router.Use(cors.New(cors.Config{ AllowAllOrigins: true, // AllowOrigins: []string{"http://localhost:8080", "http://localhost:9090"}, // AllowMethods: []string{"PUT", "PATCH"}, // AllowHeaders: []string{"Origin"}, ExposeHeaders: []string{"Content-Length"}, AllowCredentials: true, // AllowOriginFunc: func(origin string) bool { // return origin == "https://github.com" // }, MaxAge: 12 * time.Hour, })) err := router.Run(":8080") if err != nil { log.Panicf("error: %s", err) } }