Migrer exposition statique à StaticWithConfig #69

Merged
vlbeaudoin merged 2 commits from refactor/static into main 2023-07-04 22:19:58 -04:00
15 changed files with 52 additions and 31 deletions

View file

@ -16,6 +16,8 @@ ADD config/ config/
ADD media/ media/
ADD templates/ templates/
RUN CGO_ENABLED=0 go build -a -installsuffix cgo -o agecem-org .
# Alpine

View file

@ -25,6 +25,7 @@ import (
"git.agecem.com/agecem/agecem-org/config"
"git.agecem.com/agecem/agecem-org/media"
"git.agecem.com/agecem/agecem-org/public"
"git.agecem.com/agecem/agecem-org/templates"
"github.com/labstack/echo/v4"
"github.com/labstack/echo/v4/middleware"
)
@ -35,7 +36,10 @@ type Template struct {
var cfg config.Config
var embedFS embed.FS
var (
publicFS embed.FS
templatesFS embed.FS
)
// serverCmd represents the server command
var serverCmd = &cobra.Command{
@ -64,7 +68,8 @@ var serverCmd = &cobra.Command{
func init() {
rootCmd.AddCommand(serverCmd)
embedFS = public.GetEmbedFS()
publicFS = public.GetPublicFS()
templatesFS = templates.GetTemplatesFS()
// server.port - --server-port
serverCmd.Flags().Int("server-port", 8080, "Port to run the webserver on (config: server.port)")
@ -122,13 +127,21 @@ func RunServer() {
e := echo.New()
t := &Template{
templates: template.Must(template.ParseFS(embedFS, "html/*.gohtml")),
templates: template.Must(template.ParseFS(templatesFS, "html/*.gohtml")),
}
e.Renderer = t
e.Pre(middleware.RemoveTrailingSlash())
groupStatic := e.Group("/public/*")
groupStatic.Use(middleware.StaticWithConfig(middleware.StaticConfig{
Root: "/",
Filesystem: http.FS(publicFS),
//TODO
//Browse: true,
}))
groupV1 := e.Group("/v1")
groupV1.Use(middleware.AddTrailingSlash())
@ -188,12 +201,6 @@ func RunServer() {
groupV1.DELETE("/bucket/:bucket/:document", handleV1DocumentDelete)
// Static Routes
e.GET("/static/general.css", handleStaticCSSGeneral)
e.GET("/static/index.css", handleStaticCSSIndex)
// HTML Routes
e.GET("/", handleIndex)
@ -740,17 +747,3 @@ func handleAdminDocumentsUploadPOST(c echo.Context) error {
return c.Render(http.StatusOK, "admin-upload-html", struct{ Message string }{Message: message})
}
// CSS Handlers
func handleStaticCSSIndex(c echo.Context) error {
// TODO Ajouter gestion d'erreurs
data, _ := embedFS.ReadFile("css/index.css")
return c.Blob(http.StatusOK, "text/css", data)
}
func handleStaticCSSGeneral(c echo.Context) error {
// TODO Ajouter gestion d'erreurs
data, _ := embedFS.ReadFile("css/general.css")
return c.Blob(http.StatusOK, "text/css", data)
}

View file

@ -1,3 +0,0 @@
{{ define "general-html" }}
<link rel="stylesheet" href="/static/general.css">
{{ end }}

View file

@ -1,10 +1,18 @@
/*
Package public contient les fichiers css et js exposés publiquement par l'application.
Le contenu sera embedded dans le fichier binaire, dans le but de bundle les
dépendances avec l'application, simplifiant son déploiement.
Une copie du contenu peut être obtenue par un appel de GetPublicFS().
*/
package public
import "embed"
//go:embed html/* css/* js/*
var embedFS embed.FS
//go:embed css/*.css js/*.js
var publicFS embed.FS
func GetEmbedFS() embed.FS {
return embedFS
func GetPublicFS() embed.FS {
return publicFS
}

View file

@ -0,0 +1,3 @@
{{ define "general-html" }}
<link rel="stylesheet" href="/public/css/general.css">
{{ end }}

View file

@ -5,7 +5,7 @@
<meta charset="utf-8">
<title>AGECEM</title>
{{ template "general-html" }}
<link rel="stylesheet" href="static/index.css">
<link rel="stylesheet" href="/public/css/index.css">
</head>
<body>
{{ template "header-html" }}

18
templates/templates.go Normal file
View file

@ -0,0 +1,18 @@
/*
Package templates contient les fichiers gohtml à templater par l'application.
Le contenu sera embedded dans le fichier binaire, dans le but de bundle les
dépendances avec l'application, simplifiant son déploiement.
Une copie du contenu peut être obtenue par un appel de GetTemplatesFS().
*/
package templates
import "embed"
//go:embed html/*.gohtml
var templatesFS embed.FS
func GetTemplatesFS() embed.FS {
return templatesFS
}