mirror of
https://github.com/hay-kot/homebox.git
synced 2024-12-18 13:06:32 +00:00
encapsulate notFoundHandler
This commit is contained in:
parent
5bf7efe87e
commit
61483c3ea4
1 changed files with 32 additions and 49 deletions
|
@ -5,7 +5,6 @@ import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"io/fs"
|
|
||||||
"mime"
|
"mime"
|
||||||
"net/http"
|
"net/http"
|
||||||
"path"
|
"path"
|
||||||
|
@ -26,14 +25,11 @@ const prefix = "/api"
|
||||||
|
|
||||||
// registerRoutes registers all the routes for the API
|
// registerRoutes registers all the routes for the API
|
||||||
func (a *app) newRouter(repos *repo.AllRepos) *chi.Mux {
|
func (a *app) newRouter(repos *repo.AllRepos) *chi.Mux {
|
||||||
|
registerMimes()
|
||||||
|
|
||||||
r := chi.NewRouter()
|
r := chi.NewRouter()
|
||||||
a.setGlobalMiddleware(r)
|
a.setGlobalMiddleware(r)
|
||||||
|
|
||||||
// =========================================================================
|
|
||||||
// Base Routes
|
|
||||||
|
|
||||||
DumpEmbedContents()
|
|
||||||
|
|
||||||
r.Get("/swagger/*", httpSwagger.Handler(
|
r.Get("/swagger/*", httpSwagger.Handler(
|
||||||
httpSwagger.URL(fmt.Sprintf("%s://%s/swagger/doc.json", a.conf.Swagger.Scheme, a.conf.Swagger.Host)),
|
httpSwagger.URL(fmt.Sprintf("%s://%s/swagger/doc.json", a.conf.Swagger.Scheme, a.conf.Swagger.Host)),
|
||||||
))
|
))
|
||||||
|
@ -78,8 +74,7 @@ func (a *app) newRouter(repos *repo.AllRepos) *chi.Mux {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
r.NotFound(NotFoundHandler)
|
r.NotFound(notFoundHandler())
|
||||||
|
|
||||||
return r
|
return r
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -106,7 +101,7 @@ func (a *app) LogRoutes(r *chi.Mux) {
|
||||||
|
|
||||||
var ErrDir = errors.New("path is dir")
|
var ErrDir = errors.New("path is dir")
|
||||||
|
|
||||||
func init() {
|
func registerMimes() {
|
||||||
err := mime.AddExtensionType(".js", "application/javascript")
|
err := mime.AddExtensionType(".js", "application/javascript")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
|
@ -118,48 +113,36 @@ func init() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func tryRead(fs embed.FS, prefix, requestedPath string, w http.ResponseWriter) error {
|
func notFoundHandler() http.HandlerFunc {
|
||||||
f, err := fs.Open(path.Join(prefix, requestedPath))
|
tryRead := func(fs embed.FS, prefix, requestedPath string, w http.ResponseWriter) error {
|
||||||
if err != nil {
|
f, err := fs.Open(path.Join(prefix, requestedPath))
|
||||||
return err
|
|
||||||
}
|
|
||||||
defer f.Close()
|
|
||||||
|
|
||||||
stat, _ := f.Stat()
|
|
||||||
if stat.IsDir() {
|
|
||||||
return ErrDir
|
|
||||||
}
|
|
||||||
|
|
||||||
contentType := mime.TypeByExtension(filepath.Ext(requestedPath))
|
|
||||||
w.Header().Set("Content-Type", contentType)
|
|
||||||
_, err = io.Copy(w, f)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
func NotFoundHandler(w http.ResponseWriter, r *http.Request) {
|
|
||||||
err := tryRead(public, "public", r.URL.Path, w)
|
|
||||||
if err == nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
log.Debug().
|
|
||||||
Str("path", r.URL.Path).
|
|
||||||
Msg("served from embed not found - serving index.html")
|
|
||||||
err = tryRead(public, "public", "index.html", w)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func DumpEmbedContents() {
|
|
||||||
// recursively prints all contents in the embed.FS
|
|
||||||
err := fs.WalkDir(public, ".", func(path string, d fs.DirEntry, err error) error {
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
fmt.Println(path)
|
defer f.Close()
|
||||||
return nil
|
|
||||||
})
|
stat, _ := f.Stat()
|
||||||
if err != nil {
|
if stat.IsDir() {
|
||||||
panic(err)
|
return ErrDir
|
||||||
|
}
|
||||||
|
|
||||||
|
contentType := mime.TypeByExtension(filepath.Ext(requestedPath))
|
||||||
|
w.Header().Set("Content-Type", contentType)
|
||||||
|
_, err = io.Copy(w, f)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
err := tryRead(public, "public", r.URL.Path, w)
|
||||||
|
if err == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.Debug().
|
||||||
|
Str("path", r.URL.Path).
|
||||||
|
Msg("served from embed not found - serving index.html")
|
||||||
|
err = tryRead(public, "public", "index.html", w)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue