🏗️ Used server module in home app for headers edits

This commit is contained in:
Maxim Lebedev 2023-12-09 12:29:57 +06:00
parent 1b987f1f0d
commit 0c2f6b560b
Signed by: toby3d
GPG Key ID: 1F14E25B7C119FC5
1 changed files with 22 additions and 4 deletions

View File

@ -24,6 +24,7 @@ import (
pageucase "source.toby3d.me/toby3d/home/internal/page/usecase"
resourcefsrepo "source.toby3d.me/toby3d/home/internal/resource/repository/fs"
resourceucase "source.toby3d.me/toby3d/home/internal/resource/usecase"
servercase "source.toby3d.me/toby3d/home/internal/server/usecase"
sitefsrepo "source.toby3d.me/toby3d/home/internal/site/repository/fs"
siteucase "source.toby3d.me/toby3d/home/internal/site/usecase"
staticfsrepo "source.toby3d.me/toby3d/home/internal/static/repository/fs"
@ -56,6 +57,7 @@ func NewApp(logger *log.Logger, config *domain.Config) (*App, error) {
themer := themeucase.NewThemeUseCase(partialsDir, themes)
pages := pagefsrepo.NewFileSystemPageRepository(contentDir)
pager := pageucase.NewPageUseCase(pages, resources)
server := servercase.NewServerUseCase()
handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// INFO(toby3d): any static file is public and unprotected by design, so it's safe to search it
// first before deep down to any page or it's resource which might be secured by middleware or
@ -115,6 +117,23 @@ func NewApp(logger *log.Logger, config *domain.Config) (*App, error) {
return
}
srv, err := server.Do(r.Context(), *s)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
for i := range srv.Headers {
if !srv.Headers[i].IsMatched(r.URL.Path) {
continue
}
for name, value := range srv.Headers[i].Headers {
w.Header().Set(name, value)
}
}
p, err := pager.Do(r.Context(), lang, r.URL.Path)
if err != nil {
if !errors.Is(err, page.ErrNotExist) {
@ -178,14 +197,13 @@ func NewApp(logger *log.Logger, config *domain.Config) (*App, error) {
}
})
chain := middleware.Chain{middleware.LogFmt()}
server := &http.Server{
return &App{server: &http.Server{
Addr: config.AddrPort().String(),
Handler: chain.Handler(handler),
ErrorLog: logger,
WriteTimeout: 500 * time.Millisecond,
}
return &App{server: server}, nil
}}, nil
}
func (a *App) Run(ln net.Listener) error {