Add preforking, middlewares, organize some code

This commit is contained in:
Shane C 2024-04-22 20:00:27 -04:00
parent 23b284f993
commit de7e426598
No known key found for this signature in database
GPG key ID: 565F3A1C80F8AA9D
4 changed files with 56 additions and 27 deletions

View file

@ -8,35 +8,19 @@ import (
"git.shadowhosting.xyz/shadow/utils"
"github.com/goccy/go-json"
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/earlydata"
"github.com/gofiber/fiber/v2/middleware/etag"
"github.com/gofiber/fiber/v2/middleware/healthcheck"
"github.com/gofiber/fiber/v2/middleware/helmet"
"github.com/gofiber/fiber/v2/middleware/idempotency"
"github.com/gofiber/fiber/v2/middleware/limiter"
"github.com/gofiber/template/html/v2"
"github.com/spf13/cobra"
"github.com/spf13/viper"
"log"
"os"
"strings"
"time"
)
func viteAsset(src string) string {
file, err := os.ReadFile("dist/.vite/manifest.json")
if err != nil {
log.Fatalln(err)
}
var viteManifestData map[string]map[string]interface{}
if err := json.Unmarshal(file, &viteManifestData); err != nil {
log.Fatalln(err)
}
src = strings.TrimPrefix(src, "/")
if _, ok := viteManifestData[src]; ok {
return "/" + viteManifestData[src]["file"].(string)
} else {
return ""
}
}
// runCmd represents the run command
var runCmd = &cobra.Command{
Use: "run",
@ -49,7 +33,7 @@ This application is a tool to generate the needed files
to quickly create a Cobra application.`,
Run: func(cmd *cobra.Command, args []string) {
if viper.GetBool("dev") {
if viper.GetBool("dev") && !fiber.IsChild() {
go utils.RunViteServer()
}
@ -59,15 +43,32 @@ to quickly create a Cobra application.`,
engine.Reload(true)
}
engine.AddFunc("viteAsset", viteAsset)
engine.AddFunc("viteAsset", utils.ViteAsset)
app := fiber.New(fiber.Config{
AppName: "shadow",
EnableIPValidation: true,
Views: engine,
ViewsLayout: "index",
Prefork: true,
JSONEncoder: json.Marshal,
JSONDecoder: json.Unmarshal,
})
app.Use(earlydata.New())
app.Use(healthcheck.New())
app.Use(helmet.New())
app.Use(etag.New())
app.Use(idempotency.New())
app.Use(limiter.New(limiter.Config{
Max: 175,
Expiration: 1 * time.Minute,
KeyGenerator: func(c *fiber.Ctx) string {
return c.Get("x-forwarded-for")
},
LimiterMiddleware: limiter.SlidingWindow{},
}))
app.Static("/assets", "./dist/assets")
app.Get("/", func(ctx *fiber.Ctx) error {

View file

@ -2,7 +2,7 @@
"name": "shadow",
"type": "module",
"scripts": {
"dev": "bun run vite build --watch --debug"
"dev": "bun run vite build --watch"
},
"devDependencies": {
"@types/bun": "latest",

View file

@ -6,5 +6,4 @@
Hello world!
</h1>
{{end}}

29
utils/template_funcs.go Normal file
View file

@ -0,0 +1,29 @@
package utils
import (
"github.com/goccy/go-json"
"log"
"os"
"strings"
)
func ViteAsset(src string) string {
file, err := os.ReadFile("dist/.vite/manifest.json")
if err != nil {
log.Fatalln(err)
}
var viteManifestData map[string]map[string]interface{}
if err := json.Unmarshal(file, &viteManifestData); err != nil {
log.Fatalln(err)
}
src = strings.TrimPrefix(src, "/")
if _, ok := viteManifestData[src]; ok {
return "/" + viteManifestData[src]["file"].(string)
} else {
return ""
}
}