shiori/internal/http/http.go
Felipe Martin 1f309469c5
feat: reverts message in json output and allows configuration (#1082)
* feat: allow future deprecated message response with config

* tests: middleware

* fix: middleware order

* fix: frontend using message in body

* fix: cors

* feat: modify response type with header

* fix(webapp): added new headers

* dist: updated webapp files

* test(e2e): fixes

* fix: middleware returning body for 204 requests

* fix: frontend apis

* tests: cors middleware
2025-03-16 19:09:28 +01:00

37 lines
1 KiB
Go

package http
import (
"net/http"
"github.com/go-shiori/shiori/internal/http/webcontext"
"github.com/go-shiori/shiori/internal/model"
)
// ToHTTPHandler converts a model.HttpHandler to http.HandlerFunc with dependencies and middlewares
func ToHTTPHandler(deps model.Dependencies, h model.HttpHandler, middlewares ...model.HttpMiddleware) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
c := webcontext.NewWebContext(w, r)
// Execute OnRequest middlewares
for _, m := range middlewares {
if err := m.OnRequest(deps, c); err != nil {
// Handle middleware error
deps.Logger().WithError(err).Error("middleware error in request")
http.Error(w, "Internal Server Error", http.StatusInternalServerError)
return
}
}
// Execute handler
h(deps, c)
// Execute OnResponse middlewares in reverse order
for i := len(middlewares) - 1; i >= 0; i-- {
m := middlewares[i]
if err := m.OnResponse(deps, c); err != nil {
deps.Logger().WithError(err).Error("middleware error in response")
return
}
}
}
}