2023-03-15 00:05:24 +00:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
2023-04-25 09:37:42 +00:00
|
|
|
"context"
|
|
|
|
"errors"
|
2023-03-15 00:05:24 +00:00
|
|
|
"log"
|
2023-04-25 09:37:42 +00:00
|
|
|
"os"
|
2023-05-02 00:12:43 +00:00
|
|
|
|
2023-05-03 21:50:08 +00:00
|
|
|
"personalwebsite/apps"
|
2023-05-18 01:57:44 +00:00
|
|
|
blogwriter "personalwebsite/apps/BlogWriter"
|
2023-05-03 21:50:08 +00:00
|
|
|
"personalwebsite/apps/blogviewer"
|
|
|
|
"personalwebsite/apps/finder"
|
|
|
|
imgviewer "personalwebsite/apps/img-viewer"
|
|
|
|
"personalwebsite/apps/personalprops"
|
2023-05-16 10:51:28 +00:00
|
|
|
"personalwebsite/routes"
|
2023-04-29 13:58:39 +00:00
|
|
|
"personalwebsite/wde"
|
2023-04-25 09:37:42 +00:00
|
|
|
"personalwebsite/webfilesystem"
|
2023-03-15 00:05:24 +00:00
|
|
|
|
2023-04-25 09:37:42 +00:00
|
|
|
"github.com/joho/godotenv"
|
|
|
|
"go.mongodb.org/mongo-driver/mongo"
|
|
|
|
"go.mongodb.org/mongo-driver/mongo/options"
|
2023-03-15 00:05:24 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
func main() {
|
2023-04-25 09:37:42 +00:00
|
|
|
if err := godotenv.Load(); err != nil {
|
|
|
|
println("No .env file found")
|
|
|
|
}
|
|
|
|
|
|
|
|
mongoConnect, err := FindEnv("MONGO_CONNECT")
|
|
|
|
if err != nil {
|
|
|
|
panic(err.Error())
|
|
|
|
}
|
|
|
|
|
|
|
|
dBName, err := FindEnv("DATABASE")
|
|
|
|
if err != nil {
|
|
|
|
panic(err.Error())
|
|
|
|
}
|
|
|
|
|
|
|
|
webFsCollection, err := FindEnv("COLLECTION_WEBFS")
|
|
|
|
if err != nil {
|
|
|
|
panic(err.Error())
|
|
|
|
}
|
|
|
|
|
|
|
|
clientOptions := options.Client().ApplyURI(mongoConnect)
|
|
|
|
client, err := mongo.Connect(context.TODO(), clientOptions)
|
|
|
|
if err != nil {
|
|
|
|
log.Fatal(err)
|
|
|
|
}
|
|
|
|
err = client.Ping(context.TODO(), nil)
|
|
|
|
if err != nil {
|
|
|
|
log.Fatal(err)
|
|
|
|
}
|
|
|
|
|
2023-05-16 10:51:28 +00:00
|
|
|
webfs := webfilesystem.NewWebFileSystem(client, dBName, webFsCollection)
|
|
|
|
appsStorage := apps.NewApplicationsStorage(map[string]apps.WebDEApplication{}, webfs)
|
|
|
|
// 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
|
2023-03-15 12:32:41 +00:00
|
|
|
|
2023-05-16 10:51:28 +00:00
|
|
|
// router.GET("/", func(ctx *gin.Context) {
|
|
|
|
// ctx.HTML(http.StatusOK, "index.tmpl", gin.H{})
|
|
|
|
// })
|
2023-03-18 00:34:56 +00:00
|
|
|
|
2023-05-01 12:32:41 +00:00
|
|
|
webde := wde.NewWDE(webfs)
|
2023-04-29 20:17:34 +00:00
|
|
|
|
2023-05-18 01:57:44 +00:00
|
|
|
//TODO Split to different apps init for private and public?
|
2023-05-01 12:32:41 +00:00
|
|
|
persPropsApp := personalprops.NewPersPropsApp(webfs)
|
2023-04-29 13:58:39 +00:00
|
|
|
finderApp := finder.NewFinderApplication(webfs)
|
2023-04-29 16:47:12 +00:00
|
|
|
imgViewerApp := imgviewer.NewImgViewerApp(webfs)
|
2023-04-29 12:02:25 +00:00
|
|
|
blogViewerApp := blogviewer.NewBlogViewerApp(webfs)
|
2023-05-18 01:57:44 +00:00
|
|
|
blogWriterApp := blogwriter.NewBlogWriterApp(webfs)
|
2023-05-16 10:51:28 +00:00
|
|
|
appsStorage.Apps["personal-properties"] = persPropsApp
|
2023-04-29 13:58:39 +00:00
|
|
|
appsStorage.Apps["finder"] = finderApp
|
2023-05-16 10:51:28 +00:00
|
|
|
appsStorage.Apps["img-viewer"] = imgViewerApp
|
2023-05-18 01:57:44 +00:00
|
|
|
appsStorage.Apps[blogViewerApp.GetAppID()] = blogViewerApp
|
|
|
|
appsStorage.Apps["BlogWriter"] = blogWriterApp
|
2023-05-01 12:32:41 +00:00
|
|
|
|
2023-05-16 10:51:28 +00:00
|
|
|
go routes.PublicRoutes(webfs, webde, appsStorage)
|
|
|
|
routes.PrivateRoutes(webfs, webde, appsStorage)
|
|
|
|
|
|
|
|
// system := router.Group("system")
|
|
|
|
// {
|
|
|
|
// libsGroup := system.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 := system.Group("wde")
|
|
|
|
// {
|
|
|
|
// routewde.PublicRoutes(wdeGroup, webde)
|
|
|
|
// }
|
|
|
|
// apps := system.Group("applications") //TODO to libs
|
|
|
|
// {
|
|
|
|
// apps.GET("/:appid/:method", func(ctx *gin.Context) {
|
|
|
|
// appId := ctx.Param("appid")
|
|
|
|
// method := ctx.Param("method")
|
|
|
|
|
|
|
|
// app, isExist := appsStorage.Apps[appId]
|
|
|
|
// if !isExist {
|
|
|
|
// ctx.Status(http.StatusNoContent)
|
|
|
|
// return
|
|
|
|
// }
|
|
|
|
// switch method {
|
|
|
|
// case "getmanifest":
|
|
|
|
// ctx.JSON(http.StatusOK, app.GetManifest())
|
|
|
|
// case "app.js":
|
|
|
|
// ctx.File("resources/sys/" + appId + "/" + appId + ".js")
|
|
|
|
// case "app.css":
|
|
|
|
// ctx.File("resources/sys/" + appId + "/" + appId + ".css")
|
|
|
|
// default:
|
|
|
|
// ctx.Status(http.StatusBadRequest)
|
|
|
|
// }
|
|
|
|
// })
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
|
|
|
|
// fs := router.Group("fs")
|
|
|
|
// {
|
|
|
|
// fsGroup := systemGroup.Group("fs")
|
|
|
|
// {
|
|
|
|
// webfs.PublicRoutes(fsGroup)
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// app := router.Group("app")
|
|
|
|
// {
|
|
|
|
// persPropApp := app.Group("AboutMe")
|
|
|
|
// {
|
|
|
|
// persPropsApp.Route(persPropApp)
|
|
|
|
// }
|
|
|
|
// finderAppRoute := app.Group("Finder")
|
|
|
|
// {
|
|
|
|
// finderApp.Routes(finderAppRoute)
|
|
|
|
// }
|
|
|
|
// imgViewerRoute := app.Group("img-viewer")
|
|
|
|
// {
|
|
|
|
// imgViewerApp.Route(imgViewerRoute)
|
|
|
|
// }
|
|
|
|
// blogViewerRoute := app.Group("blog-viewer")
|
|
|
|
// {
|
|
|
|
// blogViewerApp.Route(blogViewerRoute)
|
|
|
|
// }
|
|
|
|
|
|
|
|
// 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)
|
|
|
|
// }
|
|
|
|
// }
|
2023-03-15 00:05:24 +00:00
|
|
|
}
|
|
|
|
|
2023-05-03 21:50:08 +00:00
|
|
|
// func index(c *gin.Context) {
|
|
|
|
// c.HTML(http.StatusOK, "base.html", nil)
|
|
|
|
// }
|
2023-04-25 09:37:42 +00:00
|
|
|
|
|
|
|
func FindEnv(parameter string) (string, error) {
|
|
|
|
path, exists := os.LookupEnv(parameter)
|
|
|
|
|
|
|
|
if exists {
|
|
|
|
println("[ENV] Requsted " + parameter + " = " + path) //FIXME Only in Debug log
|
|
|
|
return path, nil
|
|
|
|
} else {
|
|
|
|
panic("[ENV] Requsted " + parameter + " not found")
|
|
|
|
return "", errors.New("env parameter not found")
|
|
|
|
}
|
|
|
|
}
|