1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- package web
- import (
- _ "embed"
- "fmt"
- "html/template"
- "net/http"
- "path/filepath"
- "github.com/fgm/izidic"
- "github.com/gin-gonic/gin"
- "code.osinet.fr/fgm/sqs_demo/back/services"
- "code.osinet.fr/fgm/sqs_demo/back/services/redriver"
- "code.osinet.fr/fgm/sqs_demo/front"
- )
- func SetupRoutes(rd redriver.Redriver, renderer *template.Template) *gin.Engine {
- const assetsPrefix = "/assets/"
- r := gin.Default()
- r.SetHTMLTemplate(renderer)
- r.SetTrustedProxies(nil)
- r.GET("/", makeHomeHandler(rd))
- r.StaticFS(assetsPrefix, PrefixFileSystem(assetsPrefix, http.FS(front.Assets)))
- r.GET("/queue/:name", makeQueueHandler(rd))
- return r
- }
- func HttpService(dic *izidic.Container) (any, error) {
- rd := dic.MustService(services.SvcRedriver).(redriver.Redriver)
- re := dic.MustService(services.SvcRenderer).(*template.Template)
- return SetupRoutes(rd, re), nil
- }
- func RendererService(dic *izidic.Container) (any, error) {
- renderer := template.New("redriver")
- renderer, err := renderer.New("queue-get").Parse(front.QueueGet)
- if err != nil {
- return nil, fmt.Errorf("failed parsing queue-get template")
- }
- return renderer, nil
- }
- // PrefixFileSystem converts a http.FileSystem by serving it requests prefixed
- // by the passed prefix, allowing rooted static directories matching the name
- // of an embed.FS.
- func PrefixFileSystem(prefix string, ifs http.FileSystem) http.FileSystem {
- return &prefixedFS{
- prefix: prefix,
- ifs: ifs,
- }
- }
- type prefixedFS struct {
- prefix string
- ifs http.FileSystem
- }
- // Open implements http.FileSystem
- func (pfs *prefixedFS) Open(name string) (http.File, error) {
- return pfs.ifs.Open(filepath.Join(pfs.prefix, name))
- }
|