🏗️ Used server module in home app for redirects

This commit is contained in:
Maxim Lebedev 2023-12-09 13:13:47 +06:00
parent 421a45afcb
commit 4fbf3e3659
Signed by: toby3d
GPG Key ID: 1F14E25B7C119FC5
1 changed files with 68 additions and 8 deletions

View File

@ -78,6 +78,40 @@ func NewApp(logger *log.Logger, config *domain.Config) (*App, error) {
return
}
siteServer, err := server.Do(r.Context(), *s)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
for i := range siteServer.Headers {
if !siteServer.Headers[i].IsMatched(r.URL.Path) {
continue
}
for name, value := range siteServer.Headers[i].Headers {
w.Header().Set(name, value)
}
}
var redirect *domain.Redirect
for i := range siteServer.Redirects {
if !siteServer.Redirects[i].IsMatch(r.URL.Path) {
continue
}
if siteServer.Redirects[i].Force {
http.Redirect(w, r, siteServer.Redirects[i].To, siteServer.Redirects[i].Status)
return
}
redirect = &siteServer.Redirects[i]
break
}
if s.IsMultiLingual() {
head, tail := urlutil.ShiftPath(r.URL.Path)
@ -88,9 +122,8 @@ func NewApp(logger *log.Logger, config *domain.Config) (*App, error) {
}
if s.DefaultLanguage != domain.LanguageUnd {
supported = append(
[]language.Tag{language.Make(s.DefaultLanguage.Code())}, supported...,
)
supported = append([]language.Tag{language.Make(s.DefaultLanguage.Code())},
supported...)
}
requested, _, err := language.ParseAcceptLanguage(
@ -111,29 +144,50 @@ func NewApp(logger *log.Logger, config *domain.Config) (*App, error) {
r.URL.Path = tail
}
if lang == domain.LanguageUnd && redirect != nil {
http.Redirect(w, r, redirect.To, redirect.Status)
return
}
if s, err = siter.Do(r.Context(), lang); err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
srv, err := server.Do(r.Context(), *s)
if err != nil {
if siteServer, err = server.Do(r.Context(), *s); err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
for i := range srv.Headers {
if !srv.Headers[i].IsMatched(r.URL.Path) {
for i := range siteServer.Headers {
if !siteServer.Headers[i].IsMatched(r.URL.Path) {
continue
}
for name, value := range srv.Headers[i].Headers {
for name, value := range siteServer.Headers[i].Headers {
w.Header().Set(name, value)
}
}
for i := range siteServer.Redirects {
if !siteServer.Redirects[i].IsMatch(r.URL.Path) {
continue
}
if siteServer.Redirects[i].Force {
http.Redirect(w, r, siteServer.Redirects[i].To, siteServer.Redirects[i].Status)
return
}
*redirect = siteServer.Redirects[i]
break
}
p, err := pager.Do(r.Context(), lang, r.URL.Path)
if err != nil {
if !errors.Is(err, page.ErrNotExist) {
@ -142,6 +196,12 @@ func NewApp(logger *log.Logger, config *domain.Config) (*App, error) {
return
}
if redirect != nil {
http.Redirect(w, r, redirect.To, redirect.Status)
return
}
res, err := resourcer.Do(r.Context(), r.URL.Path)
if err != nil {
if errors.Is(err, fs.ErrNotExist) {