diff --git a/pkg/babillard/cmd.go b/pkg/babillard/cmd.go index aa745ff..17d1726 100644 --- a/pkg/babillard/cmd.go +++ b/pkg/babillard/cmd.go @@ -32,7 +32,7 @@ const ( ) func ServerCmdExecuter() error { - RunServer(app.Config.ServerContenuDir, app.Config.ServerPort) + RunServer(app.Config) return nil } diff --git a/pkg/babillard/contenu.go b/pkg/babillard/contenu.go index e75d78d..4d54e8d 100644 --- a/pkg/babillard/contenu.go +++ b/pkg/babillard/contenu.go @@ -9,6 +9,8 @@ import ( "github.com/labstack/echo/v4" ) +// pre-v2 + type ContenuHandler struct { ContenuDir string } @@ -43,3 +45,24 @@ func (h ContenuHandler) HandleAPIContenuFile(c echo.Context) error { return c.File(fmt.Sprintf("%s/%s", contenu_dir, filename)) } + +// v2 + +func APIv2ListContenu(cfg Config) echo.HandlerFunc { + return func(c echo.Context) error { + files, err := ListContenu(cfg.ServerContenuDir) + if err != nil { + return c.JSON(http.StatusInternalServerError, ErrorResponse{Error: err.Error()}) + } + + return c.JSON(http.StatusOK, NewContenuResponse(files)) + } +} + +// ui + +func UIContenuFichier(cfg Config) echo.HandlerFunc { + return func(c echo.Context) error { + return c.File(fmt.Sprintf("%s/%s", cfg.ServerContenuDir, c.Param("fichier"))) + } +} diff --git a/pkg/babillard/data.go b/pkg/babillard/data.go index e126748..0f19e16 100644 --- a/pkg/babillard/data.go +++ b/pkg/babillard/data.go @@ -1,24 +1,42 @@ package babillard -import "os" +import ( + "fmt" + "os" +) -func ListContenu(path string) ([]string, error) { - var files []string - f, err_open := os.Open(path) - defer f.Close() +var forbiddenFiles = []string{".gitkeep", "messages.txt", "Thumbs.db"} - if err_open != nil { - return nil, err_open +func ListContenu(path string) (files []string, err error) { + file, err := os.Open(path) + if err != nil { + return nil, err } - fileInfo, err_read := f.Readdir(-1) - if err_read != nil { - return nil, err_read + defer file.Close() + + stats, err := file.Stat() + if err != nil { + return nil, err } - for _, file := range fileInfo { - if file.Name() != ".gitkeep" && file.Name() != "messages.txt" { - files = append(files, file.Name()) + if !stats.IsDir() { + return nil, fmt.Errorf("contenu '%s' n'est pas un répertoire", path) + } + + fileInfos, err := file.Readdir(-1) + if err != nil { + return nil, err + } + +fileLoop: + for _, fileInfo := range fileInfos { + for _, forbiddenFile := range forbiddenFiles { + if fileInfo.Name() == forbiddenFile { + continue fileLoop + } } + files = append(files, fileInfo.Name()) } + return files, nil } diff --git a/pkg/babillard/handlers.go b/pkg/babillard/handlers.go index fc636c8..73bd856 100644 --- a/pkg/babillard/handlers.go +++ b/pkg/babillard/handlers.go @@ -18,12 +18,16 @@ API Specifications '/api' | GET | Affiche les spécifications API '/api/contenu' | GET | Affiche le nom des fichiers dans 'contenu/' '/api/contenu/{filename}' | GET | Affiche le fichier 'contenu/{filename}' ------` +----- +v2 +-- +'/api/v2/contenu' | GET | Affiche les noms des fichiers dans 'contenu/' +` return c.String(http.StatusOK, apispec) } -func RunServer(contenuDir string, serverPort int) { +func RunServer(cfg Config) { log.Print("[I] Starting webserver") e := echo.New() @@ -45,11 +49,17 @@ func RunServer(contenuDir string, serverPort int) { groupAPI := e.Group("/api") - contenuHandler := NewContenuHandler(contenuDir) + contenuHandler := NewContenuHandler(cfg.ServerContenuDir) groupAPI.GET("/", HandleAPIShow) groupAPI.GET("/contenu/", contenuHandler.HandleAPIContenuList) groupAPI.GET("/contenu/:filename/", contenuHandler.HandleAPIContenuFile) - e.Logger.Fatal(e.Start(fmt.Sprintf(":%d", serverPort))) + groupAPI.GET("/v2/contenu/", APIv2ListContenu(cfg)) + + groupUI := e.Group("/ui") + + groupUI.GET("/contenu/:fichier/", UIContenuFichier(cfg)) + + e.Logger.Fatal(e.Start(fmt.Sprintf(":%d", cfg.ServerPort))) } diff --git a/pkg/babillard/response.go b/pkg/babillard/response.go new file mode 100644 index 0000000..01b2638 --- /dev/null +++ b/pkg/babillard/response.go @@ -0,0 +1,20 @@ +package babillard + +type ErrorResponse struct { + Error string +} + +type MessageResponse struct { + Message string +} + +type ContenuResponse struct { + Data struct { + Contenu []string + } +} + +func NewContenuResponse(fichiers []string) (response ContenuResponse) { + response.Data.Contenu = fichiers + return +} diff --git a/ui/css/style.css b/ui/css/style.css index 8c8549e..36cc922 100644 --- a/ui/css/style.css +++ b/ui/css/style.css @@ -20,60 +20,3 @@ embed { flex: 1; min-height: 0; } - -#bar { - width: 100%; - background-image: linear-gradient(to right, #033ead, #3093d1); - color: white; - font-family: 'Roboto', sans-serif; - font-weight: bold; - display: flex; - align-items: center; - min-height: 75px; -} - -img#bar-bg { - position: absolute; - width: 100%; - height: 100%; - z-index: -1; -} - -#time { - font-size: 300%; - height: 53px; -} - -#text-content { - white-space: nowrap; - z-index: 1; - display: block; - height: 100%; - padding-top: 55px; - position: relative; -} - -#text-container { - height: 100%; - background-image: linear-gradient(to right, #033ead, #3093d1); - display: flex; - align-items: center; - font-size: 20px; - flex-grow: 1; -} - -#text-content div { - display: block; - position: fixed; - height: 100%; -} - -#date-time { - display: flex; - flex-flow: column; - align-items: center; - height: 100%; - background-color: #033ead; - z-index: 1; - width: 225px; -} \ No newline at end of file diff --git a/ui/embed.go b/ui/embed.go index 3b63250..f67189c 100644 --- a/ui/embed.go +++ b/ui/embed.go @@ -2,17 +2,17 @@ package ui import "embed" -//go:embed html/* +//go:embed html/*.html var htmlFS embed.FS func HTMLFS() embed.FS { return htmlFS } -//go:embed css/* +//go:embed css/*.css var cssFS embed.FS func CSSFS() embed.FS { return cssFS } -//go:embed js/* +//go:embed js/*.js var jsFS embed.FS func JSFS() embed.FS { return jsFS } diff --git a/ui/html/index.html b/ui/html/index.html index d9b81a5..baa09fa 100644 --- a/ui/html/index.html +++ b/ui/html/index.html @@ -1,43 +1,15 @@
-