diff --git a/Dockerfile b/Dockerfile index 5fa348b..0847470 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.20.2 as build +FROM golang:1.21.4 as build LABEL author="Victor Lacasse-Beaudoin " LABEL license="MIT" @@ -15,11 +15,13 @@ ADD data/ data/ ADD handlers/ handlers/ -RUN CGO_ENABLED=0 go build -a -installsuffix cgo -o babillard . +ADD public/ public/ + +RUN CGO_ENABLED=0 go build -a -o babillard . # Alpine -FROM alpine:3.17.2 +FROM alpine:3.18.4 RUN apk update && apk upgrade --no-cache @@ -27,8 +29,6 @@ WORKDIR /app ADD contenu/ contenu/ -ADD static/ static/ - COPY --from=build /go/src/app/babillard /usr/bin/babillard CMD ["babillard", "server"] diff --git a/cmd/server.go b/cmd/server.go index 44eba23..a28481b 100644 --- a/cmd/server.go +++ b/cmd/server.go @@ -3,8 +3,10 @@ package cmd import ( "fmt" "log" + "net/http" "git.agecem.com/agecem/babillard/handlers" + "git.agecem.com/agecem/babillard/public" "github.com/labstack/echo/v4" "github.com/labstack/echo/v4/middleware" "github.com/spf13/cobra" @@ -17,9 +19,9 @@ var serverCmd = &cobra.Command{ Short: "Démarrer le serveur web", Run: func(cmd *cobra.Command, args []string) { port := viper.GetInt("server.port") - static_dir := viper.GetString("server.static_dir") + //static_dir := viper.GetString("server.static_dir") - runServer(port, static_dir) + runServer(port) }, } @@ -34,25 +36,33 @@ func declareFlags() { serverCmd.Flags().String("contenu_dir", "contenu", "Répertoire du contenu à exposer (config: \"server.contenu_dir\")") viper.BindPFlag("server.contenu_dir", serverCmd.Flags().Lookup("contenu_dir")) - - serverCmd.Flags().String("static_dir", "static", "Répertoire des fichiers statiques à exposer (config: \"server.static_dir\")") - viper.BindPFlag("server.static_dir", serverCmd.Flags().Lookup("static_dir")) } -func runServer(port int, static_dir string) { +func runServer(port int) { log.Print("[I] Starting webserver") e := echo.New() - g := e.Group("") + e.Pre(middleware.AddTrailingSlash()) - e.Pre(middleware.RemoveTrailingSlash()) + e.Group("").Use(middleware.StaticWithConfig(middleware.StaticConfig{ + Root: "/html/", + Filesystem: http.FS(public.HTMLFS()), + })) + e.Group("/public/css").Use(middleware.StaticWithConfig(middleware.StaticConfig{ + Root: "/css/", + Filesystem: http.FS(public.CSSFS()), + })) + e.Group("/public/js").Use(middleware.StaticWithConfig(middleware.StaticConfig{ + Root: "/js/", + Filesystem: http.FS(public.JSFS()), + })) - g.Static("/", static_dir) + groupAPI := e.Group("/api") - g.GET("/api", handlers.HandleAPIShow) - g.GET("/api/contenu", handlers.HandleAPIContenuList) - g.GET("/api/contenu/:filename", handlers.HandleAPIContenuFile) + groupAPI.GET("/", handlers.HandleAPIShow) + groupAPI.GET("/contenu/", handlers.HandleAPIContenuList) + groupAPI.GET("/contenu/:filename/", handlers.HandleAPIContenuFile) e.Logger.Fatal(e.Start(fmt.Sprintf(":%d", port))) } diff --git a/static/style.css b/public/css/style.css similarity index 100% rename from static/style.css rename to public/css/style.css diff --git a/public/embed.go b/public/embed.go new file mode 100644 index 0000000..db7092c --- /dev/null +++ b/public/embed.go @@ -0,0 +1,18 @@ +package public + +import "embed" + +//go:embed html/* +var htmlFS embed.FS + +func HTMLFS() embed.FS { return htmlFS } + +//go:embed css/* +var cssFS embed.FS + +func CSSFS() embed.FS { return cssFS } + +//go:embed js/* +var jsFS embed.FS + +func JSFS() embed.FS { return jsFS } diff --git a/static/index.html b/public/html/index.html similarity index 86% rename from static/index.html rename to public/html/index.html index c8a77bd..c32e44b 100644 --- a/static/index.html +++ b/public/html/index.html @@ -5,13 +5,13 @@ - + - + diff --git a/static/slider.js b/public/js/slider.js similarity index 92% rename from static/slider.js rename to public/js/slider.js index 96a65c8..e30a9c6 100644 --- a/static/slider.js +++ b/public/js/slider.js @@ -6,7 +6,7 @@ function afficherIndex() { } function afficherImage() { - $('#image').attr('src', "api/contenu/"+images[indexImages]); + $('#image').attr('src', "/api/contenu/"+images[indexImages]); } function augmenterIndex() { diff --git a/static/text.js b/public/js/text.js similarity index 100% rename from static/text.js rename to public/js/text.js